{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract CharterGovernanceToken",
          "name": "governance",
          "type": "address"
        },
        {
          "internalType": "contract CharterStakingToken",
          "name": "staking",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CharterTokensNotOwnedByCharter",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExistingTrialDepositFound",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "available",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "required",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MustBeCharterOrListingOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TrialDepositNotFound",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "scalar",
          "type": "uint64"
        }
      ],
      "name": "ApproveToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceTransfered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "invited",
          "type": "address"
        }
      ],
      "name": "Invite",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "kicked",
          "type": "address"
        }
      ],
      "name": "Kick",
      "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": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "Purchased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "cashier",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "PurchasedWithCashier",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "basisPoints",
          "type": "uint64"
        }
      ],
      "name": "SetCashierSplit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "contributionBasisPoints",
          "type": "uint64"
        }
      ],
      "name": "SetContributionBasisPoints",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "expansion",
          "type": "uint64"
        }
      ],
      "name": "SetGovernanceExpansion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "reserveBasisPoints",
          "type": "uint64"
        }
      ],
      "name": "SetReserveBasisPoints",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "expansion",
          "type": "uint64"
        }
      ],
      "name": "SetStakeExpansion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "TrialCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "TrialFinished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "TrialStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "listing",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "cashier",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPaid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "purchaseToken",
          "type": "address"
        }
      ],
      "name": "TrialStartedWithCashier",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "scalar",
          "type": "uint64"
        }
      ],
      "name": "approveToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "cancelTrial",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Listing",
          "name": "listing",
          "type": "address"
        }
      ],
      "name": "cashierSplitOf",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "config",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "contributionBasisPoints",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "stakeExpansion",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "stakeExpansionSplitWithPurchaserBasisPoints",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "governanceExpansion",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "reserveBasisPoints",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "earningWithdrawPeriodInSeconds",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contributionBasisPoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "earningWithdrawPeriodInSeconds",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "finishTrial",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        }
      ],
      "name": "getDepositAmount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "contract ERC20",
              "name": "purchaseToken",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "purchaseTokenAmount",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "amount",
              "type": "uint64"
            },
            {
              "internalType": "contract Cashier",
              "name": "cashier",
              "type": "address"
            }
          ],
          "internalType": "struct TrialDeposit",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        }
      ],
      "name": "getDepositAmount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "contract ERC20",
              "name": "purchaseToken",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "purchaseTokenAmount",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "amount",
              "type": "uint64"
            },
            {
              "internalType": "contract Cashier",
              "name": "cashier",
              "type": "address"
            }
          ],
          "internalType": "struct TrialDeposit",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governanceExpansion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governanceToken",
      "outputs": [
        {
          "internalType": "contract CharterGovernanceToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Member",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "has",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Member",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "join",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Member",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "leave",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract App",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "purchase",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Cashier",
          "name": "cashier",
          "type": "address"
        },
        {
          "internalType": "contract App",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "purchase",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveBasisPoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "scalarOf",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Listing",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "basisPoints",
          "type": "uint64"
        }
      ],
      "name": "setCashierSplitOf",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_contributionBasisPoints",
          "type": "uint64"
        }
      ],
      "name": "setContributionBasisPoints",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_expansion",
          "type": "uint64"
        }
      ],
      "name": "setGovernanceExpansion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract CharterGovernanceToken",
          "name": "newGovernance",
          "type": "address"
        }
      ],
      "name": "setGovernanceToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_reserveBasisPoints",
          "type": "uint64"
        }
      ],
      "name": "setReserveBasisPoints",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_expansion",
          "type": "uint64"
        }
      ],
      "name": "setStakeExpansion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract CharterStakingToken",
          "name": "newStaking",
          "type": "address"
        }
      ],
      "name": "setStakingToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "slash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakeExpansion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakingToken",
      "outputs": [
        {
          "internalType": "contract CharterStakingToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Cashier",
          "name": "cashier",
          "type": "address"
        },
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "startTrial",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract AppBurnable",
          "name": "listing",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "startTrial",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Cashier",
          "name": "cashier",
          "type": "address"
        },
        {
          "internalType": "contract ERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "withdrawFromCashier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060405162003e2e38038062003e2e833981016040819052620000349162000162565b6200003f33620000f9565b6200004a33620000f9565b6200005533620000f9565b600380546001600160a01b039384166001600160a01b031991821617909155600280549290931691161790556040805160c08101825260648152600a6020820181905260608201526103e8918101919091526107d060808201526201518060a090910152780a00000000000003e8000000000000000a0000000000000064600455600580546001600160801b0319166a01518000000000000007d0179055620001a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200015f57600080fd5b50565b600080604083850312156200017657600080fd5b8251620001838162000149565b6020840151909250620001968162000149565b809150509250929050565b613c7d80620001b16000396000f3fe6080604052600436106101f95760003560e01c80639d5282641161010d578063bedf77a6116100a0578063f2fde38b1161006f578063f2fde38b1461076f578063f45b1b3a1461078f578063f857017014610839578063f96dae0a14610859578063fb0f25051461087957600080fd5b8063bedf77a6146106dd578063c1a2df4d146106fd578063d75f72b01461073c578063ec1e14cd1461074f57600080fd5b8063acfad249116100dc578063acfad24914610566578063b16b55a5146105a5578063b8ba16fd146105c5578063bc2402f1146106bd57600080fd5b80639d528264146104f35780639e14548114610513578063a0eb284614610533578063a2ec82f41461054657600080fd5b80635f34c6ff1161019057806379502c551161015f57806379502c55146103e357806383f684a41461047257806385283109146104925780638d7cc43c146104b75780638da5cb5b146104d557600080fd5b80635f34c6ff14610356578063602a898c14610376578063715018a61461039657806372f702f3146103ab57600080fd5b806328ffe6c8116101cc57806328ffe6c8146102bd5780632c636269146102dd57806332c27359146102fd57806354e858e01461031d57600080fd5b80631272f307146101fe57806314e4cbbf146102325780631e9b12ef1461025457806321887c3d14610274575b600080fd5b34801561020a57600080fd5b50600454600160401b90046001600160401b03165b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5061025261024d366004613976565b610897565b005b34801561026057600080fd5b5061025261026f3660046139af565b610927565b34801561028057600080fd5b506102ad61028f3660046139af565b6001600160a01b031660009081526001602052604090205460ff1690565b6040519015158152602001610229565b3480156102c957600080fd5b506102526102d83660046139af565b610973565b3480156102e957600080fd5b506102526102f83660046139cc565b610a41565b34801561030957600080fd5b50610252610318366004613976565b610e08565b34801561032957600080fd5b50600554600160401b90046001600160401b03165b6040516001600160401b039091168152602001610229565b34801561036257600080fd5b50610252610371366004613a17565b610e92565b34801561038257600080fd5b50610252610391366004613976565b61124c565b3480156103a257600080fd5b506102526112c5565b3480156103b757600080fd5b506002546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610229565b3480156103ef57600080fd5b50600454600554610430916001600160401b0380821692600160401b808404831693600160801b8104841693600160c01b9091048116928082169290041686565b604080516001600160401b03978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610229565b34801561047e57600080fd5b5061025261048d366004613a50565b6112fb565b34801561049e57600080fd5b50600454600160c01b90046001600160401b031661021f565b3480156104c357600080fd5b506004546001600160401b031661021f565b3480156104e157600080fd5b506000546001600160a01b03166103cb565b3480156104ff57600080fd5b5061025261050e366004613a50565b6114a0565b34801561051f57600080fd5b5061025261052e366004613a50565b611538565b610252610541366004613a50565b611671565b34801561055257600080fd5b50610252610561366004613a17565b611d39565b34801561057257600080fd5b5061033e6105813660046139af565b6001600160a01b03166000908152600660205260409020546001600160401b031690565b3480156105b157600080fd5b506102526105c0366004613a17565b612221565b3480156105d157600080fd5b5061066d6105e03660046139af565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039586168252600881528482203383528152908490208451928301855280548087168452600160a01b90046001600160401b03908116928401929092526001015490811693820193909352600160401b9092049092169181019190915290565b604051610229919081516001600160a01b0390811682526020808401516001600160401b039081169184019190915260408085015190911690830152606092830151169181019190915260800190565b3480156106c957600080fd5b506102526106d8366004613a50565b6123d4565b3480156106e957600080fd5b506102526106f83660046139af565b612757565b34801561070957600080fd5b5061033e6107183660046139af565b6001600160a01b03166000908152600760205260409020546001600160401b031690565b61025261074a3660046139cc565b61282c565b34801561075b57600080fd5b5061025261076a366004613976565b6130a4565b34801561077b57600080fd5b5061025261078a3660046139af565b61311d565b34801561079b57600080fd5b5061066d6107aa366004613a17565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b03958616825260088152848220968616825295865283902083519182018452805480861683526001600160401b03600160a01b9091048116968301969096526001015494851692810192909252600160401b9093049091169181019190915290565b34801561084557600080fd5b506102526108543660046139af565b6131b5565b34801561086557600080fd5b506003546103cb906001600160a01b031681565b34801561088557600080fd5b506005546001600160401b031661021f565b6000546001600160a01b031633146108ca5760405162461bcd60e51b81526004016108c190613a7e565b60405180910390fd5b600480546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527fbaec3edc6a0db2b60692f0f33c60a4452ccd745e1491897fdcbb9e3e1ea3b1b0906020015b60405180910390a150565b6000546001600160a01b031633146109515760405162461bcd60e51b81526004016108c190613a7e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190613ab3565b6001600160a01b0316336001600160a01b031614610a355760405162461bcd60e51b815260206004820181905260248201527f436861727465723a204f6e6c7920746865206f776e65722063616e206a6f696e60448201526064016108c1565b610a3e81613229565b50565b6001600160a01b038216600090815260016020526040902054829060ff16610a7b5760405162461bcd60e51b81526004016108c190613ad0565b6001600160a01b038416600090815260016020526040902054849060ff16610ab55760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190613ab3565b6001600160a01b0316148015610bab57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190613ab3565b6001600160a01b0316145b610bc8576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03841660009081526008602090815260408083203384529091529020600101546001600160401b031615610c165760405163c2bf408960e01b815260040160405180910390fd5b6000846001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190613ab3565b90506000856001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190613b07565b610cea9086613b3a565b9050610cf882333084613278565b6040516340c10f1960e01b81526001600160a01b038716906340c10f1990610d269033908990600401613b69565b600060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526008602090815260408083203380855292529182902080546001600160401b03878116600160a01b026001600160e01b03199283168a89161717835560019092018054968e16600160401b810297909216928c169290921795909517905590517faefeb749d1725e5501298934b4f4759cef90d0c24b0eed1fb90c214556ad44f190610df79086908890613b8b565b60405180910390a450505050505050565b6000546001600160a01b03163314610e325760405162461bcd60e51b81526004016108c190613a7e565b600480546fffffffffffffffff00000000000000001916600160401b6001600160401b038416908102919091179091556040519081527f5ba5961b8b43b7d001c2783e08b1b6dcb2a909673f6c88c5c4cd395c8028b4609060200161091c565b6001600160a01b038216600090815260016020526040902054829060ff16610ecc5760405162461bcd60e51b81526004016108c190613ad0565b82610edf6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f735750806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d9190613ab3565b6001600160a01b0316336001600160a01b031614155b15610f9157604051631459e2a760e01b815260040160405180910390fd5b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffe9190613ab3565b6001600160a01b031614801561108757506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613ab3565b6001600160a01b0316145b6110a4576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03808516600090815260086020908152604080832087851684528252918290208251608081018452815480861682526001600160401b03600160a01b909104811693820193909352600190910154918216928101839052600160401b909104909216606083015261112f57604051630b59c3b760e11b815260040160405180910390fd5b6001600160a01b038581166000818152600860209081526040808320948916835293905282902060018101805467ffffffffffffffff19169055805467ffffffffffffffff60a01b1916905582820151915163060f665f60e51b8152909163c1eccbe0916111a1918891600401613b69565b600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b505050506111e68160000151858360200151613301565b846001600160a01b0316846001600160a01b0316336001600160a01b03167fe8fb1978d776ecb779ba17babed973e749d1d54a2c15fc373eaf201769264b2d8460200151856000015160405161123d929190613b8b565b60405180910390a45050505050565b6000546001600160a01b031633146112765760405162461bcd60e51b81526004016108c190613a7e565b6005805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f3e648a52a1ce96eaba60259aef1f3c6b88bf6ff12b95d394e1770fb9a5bd52199060200161091c565b6000546001600160a01b031633146112ef5760405162461bcd60e51b81526004016108c190613a7e565b6112f96000613387565b565b6000546001600160a01b031633146113255760405162461bcd60e51b81526004016108c190613a7e565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190613ab3565b6001600160a01b031614801561141b57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190613ab3565b6001600160a01b0316145b611438576040516304af518760e11b815260040160405180910390fd5b6002546040516320fda12960e21b81526001600160a01b03909116906383f684a49061146a9085908590600401613b69565b600060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146114ca5760405162461bcd60e51b81526004016108c190613a7e565b6001600160a01b038216600081815260066020908152604091829020805467ffffffffffffffff19166001600160401b03861690811790915591519182527f50fff174f24f78c9803b56b2ab967e2e6427363bb595502c9e245ae6f4dd582a91015b60405180910390a25050565b816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a9190613ab3565b6001600160a01b0316336001600160a01b03161461160b5760405162461bcd60e51b815260206004820152602860248201527f436861727465723a2063616c6c6572206973206e6f7420746865206c6973746960448201526737339037bbb732b960c11b60648201526084016108c1565b6001600160a01b038216600081815260076020908152604091829020805467ffffffffffffffff19166001600160401b03861690811790915591519182527f91e36477e9043b463463d356aa571d60f03de4caef97d6f54637c84d382ab088910161152c565b8181600080836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d89190613ab3565b604051636eb1769f60e11b81523360048201523060248201529091506001600160a01b0382169063dd62ed3e90604401602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190613bad565b91506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190613b07565b6117b99085613b3a565b905082816001600160401b031611156117f75760405163cf47918160e01b8152600481018490526001600160401b03821660248201526044016108c1565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd9061182790339030908690600401613bc6565b6020604051808303816000875af1158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190613bf2565b506001600160a01b038716600090815260016020526040902054879060ff166118a55760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190613ab3565b6001600160a01b031614801561199b57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190613ab3565b6001600160a01b0316145b6119b8576040516304af518760e11b815260040160405180910390fd5b6000886001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c9190613b07565b611a269089613b3a565b60045490915060009061271090611a46906001600160401b031684613b3a565b611a509190613c14565b90506000611a5e8284613c48565b9050611b2d8b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190613ab3565b8c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b279190613ab3565b83613301565b611ba58b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b929190613ab3565b6000546001600160a01b03165b84613301565b611bb08b33846133d7565b611bba8b836136ca565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f1990611be89033908e90600401613b69565b600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505050508a6001600160a01b0316336001600160a01b03167f637b79a48cfca6f0a37dc0be60aad9e4025862a8dbb25130041bc268b845dbe6858e6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb29190613ab3565b604051611cc0929190613b8b565b60405180910390a36003546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990611cfa9033908e90600401613b69565b600060405180830381600087803b158015611d1457600080fd5b505af1158015611d28573d6000803e3d6000fd5b505050505050505050505050505050565b6001600160a01b038216600090815260016020526040902054829060ff16611d735760405162461bcd60e51b81526004016108c190613ad0565b82611d866000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015611e1a5750806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613ab3565b6001600160a01b0316336001600160a01b031614155b15611e3857604051631459e2a760e01b815260040160405180910390fd5b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea59190613ab3565b6001600160a01b0316148015611f2e57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190613ab3565b6001600160a01b0316145b611f4b576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03808516600090815260086020908152604080832087851684528252918290208251608081018452815480861682526001600160401b03600160a01b909104811693820193909352600190910154918216928101839052600160401b9091049092166060830152611fd657604051630b59c3b760e11b815260040160405180910390fd5b6020818101516001600160a01b038781166000908152600884526040808220928916825291909352822060018101805467ffffffffffffffff19169055805467ffffffffffffffff60a01b1916905560045490919061271090612042906001600160401b031684613b3a565b61204c9190613c14565b60608401519091506000906001600160a01b0316156120ac576001600160a01b038816600090815260076020526040902054612710906001600160401b03166120958486613c48565b61209f9190613b3a565b6120a99190613c14565b90505b6000816120b98486613c48565b6120c39190613c48565b905061210b85600001518a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b6001600160401b0382161561218857612188856000015186606001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f9190613ab3565b84516121a6906121a06000546001600160a01b031690565b85613301565b6121b18989856133d7565b6121bb89846136ca565b886001600160a01b0316886001600160a01b0316336001600160a01b03167f9290abccf41a1fd5511d0f517e116ec6db6b88d24e278298ec5ed410e78fdc5387896000015160405161220e929190613b8b565b60405180910390a4505050505050505050565b6001600160a01b038216600090815260016020526040902054829060ff1661225b5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156122a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c89190613ab3565b6001600160a01b031614801561235157506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190613ab3565b6001600160a01b0316145b61236e576040516304af518760e11b815260040160405180910390fd5b60405163f940e38560e01b81523060048201526001600160a01b03838116602483015284169063f940e38590604401600060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b50505050505050565b6001600160a01b038216600090815260016020526040902054829060ff1661240e5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190613ab3565b6001600160a01b031614801561250457506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613ab3565b6001600160a01b0316145b612521576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03831660009081526008602090815260408083203384529091529020600101546001600160401b03161561256f5760405163c2bf408960e01b815260040160405180910390fd5b6000836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d39190613ab3565b90506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126399190613b07565b6126439085613b3a565b905061265182333084613278565b6040516340c10f1960e01b81526001600160a01b038616906340c10f199061267f9033908890600401613b69565b600060405180830381600087803b15801561269957600080fd5b505af11580156126ad573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526008602090815260408083203380855292529182902080549487166001600160e01b031995861617600160a01b6001600160401b038881169190910291909117825560019091018054918a169190951617909355519091907fa897a0adfb1d83345bc44799624f6eb8a5c3ce6a396be5727fe5a73131618e37906127489085908790613b8b565b60405180910390a35050505050565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190613ab3565b6001600160a01b0316336001600160a01b0316146128235760405162461bcd60e51b815260206004820152602160248201527f436861727465723a204f6e6c7920746865206f776e65722063616e206c6561766044820152606560f81b60648201526084016108c1565b610a3e81613918565b8181600080836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128939190613ab3565b604051636eb1769f60e11b81523360048201523060248201529091506001600160a01b0382169063dd62ed3e90604401602060405180830381865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129049190613bad565b91506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296a9190613b07565b6129749085613b3a565b905082816001600160401b031611156129b25760405163cf47918160e01b8152600481018490526001600160401b03821660248201526044016108c1565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906129e290339030908690600401613bc6565b6020604051808303816000875af1158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190613bf2565b506001600160a01b038816600090815260016020526040902054889060ff16612a605760405162461bcd60e51b81526004016108c190613ad0565b6001600160a01b038816600090815260016020526040902054889060ff16612a9a5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b079190613ab3565b6001600160a01b0316148015612b9057506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b859190613ab3565b6001600160a01b0316145b612bad576040516304af518760e11b815260040160405180910390fd5b6000612710600460000160009054906101000a90046001600160401b03168b6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2d9190613b07565b612c37908c613b3a565b612c419190613b3a565b612c4b9190613c14565b6001600160a01b038b16600081815260076020908152604080832054815163501ad8ff60e11b815291519596509294612710946001600160401b03909416938793909263a035b1fe92600480830193928290030181865afa158015612cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd89190613b07565b612ce2908e613b3a565b612cec9190613c48565b612cf69190613b3a565b612d009190613c14565b9050612e518b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d679190613ab3565b8c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc99190613ab3565b83858f6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2d9190613b07565b8f612e389190613b3a565b612e429190613c48565b612e4c9190613c48565b613301565b612e928b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b612efe8b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef79190613ab3565b8d83613301565b612f098b33846133d7565b612f138b836136ca565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f1990612f419033908e90600401613b69565b600060405180830381600087803b158015612f5b57600080fd5b505af1158015612f6f573d6000803e3d6000fd5b505050508b6001600160a01b03168b6001600160a01b0316336001600160a01b03167f1771d3ce69278ba11e6e5edcd929be62e3261792c4bedd5a574ce0d85baf1d5f8e6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190613b07565b61301e908f613b3a565b8f6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190613ab3565b60405161308e929190613b8b565b60405180910390a4505050505050505050505050565b6000546001600160a01b031633146130ce5760405162461bcd60e51b81526004016108c190613a7e565b6004805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fc1ad5ed84e4d9ed528071a0791de6b8afce6be9ee44264df35ace4da5b3db3d49060200161091c565b6000546001600160a01b031633146131475760405162461bcd60e51b81526004016108c190613a7e565b6001600160a01b0381166131ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c1565b610a3e81613387565b6000546001600160a01b031633146131df5760405162461bcd60e51b81526004016108c190613a7e565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fd32a31b861473b13fe3f39e61709fee5f7b0cd33d4d9ba2ea4defa83fe4b368c90600090a250565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f36f0cb8524a0bfc7156d630b8ec256e3938c229292a93292b3495fbdb1778e899190a250565b6040516323b872dd60e01b81526000906001600160a01b038616906323b872dd906132ab90879087908790600401613bc6565b6020604051808303816000875af11580156132ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ee9190613bf2565b9050806132fa57600080fd5b5050505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb906133329086908690600401613b69565b6020604051808303816000875af1158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190613bf2565b90508061338157600080fd5b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060066000856001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561341b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343f9190613ab3565b6001600160a01b0316815260208101919091526040016000908120546004546001600160401b039182169350612710918491613484918791600160401b900416613b3a565b61348e9190613b3a565b6134989190613c14565b600554909150600090612710906134b8906001600160401b031684613b3a565b6134c29190613c14565b905060006134d08284613c48565b600454909150600090612710906134f790600160801b90046001600160401b031684613b3a565b6135019190613c14565b9050600061350f8284613c48565b6002546040516302893c5b60e41b81529192506001600160a01b031690632893c5b090613542908b908690600401613b69565b600060405180830381600087803b15801561355c57600080fd5b505af1158015613570573d6000803e3d6000fd5b50505050600260009054906101000a90046001600160a01b03166001600160a01b0316632893c5b08a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fa9190613ab3565b836040518363ffffffff1660e01b8152600401613618929190613b69565b600060405180830381600087803b15801561363257600080fd5b505af1158015613646573d6000803e3d6000fd5b50506002546001600160a01b03169150632893c5b0905061366f6000546001600160a01b031690565b866040518363ffffffff1660e01b815260040161368d929190613b69565b600060405180830381600087803b1580156136a757600080fd5b505af11580156136bb573d6000803e3d6000fd5b50505050505050505050505050565b600060066000846001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137329190613ab3565b6001600160a01b0316815260208101919091526040016000908120546004546001600160401b039182169350612710918491613777918791600160c01b900416613b3a565b6137819190613b3a565b61378b9190613c14565b600554909150600090612710906137ab906001600160401b031684613b3a565b6137b59190613c14565b905060006137c38284613c48565b9050600360009054906101000a90046001600160a01b03166001600160a01b03166340c10f19876001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384b9190613ab3565b836040518363ffffffff1660e01b8152600401613869929190613b69565b600060405180830381600087803b15801561388357600080fd5b505af1158015613897573d6000803e3d6000fd5b50506003546001600160a01b031691506340c10f1990506138c06000546001600160a01b031690565b846040518363ffffffff1660e01b81526004016138de929190613b69565b600060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038116600081815260016020526040808220805460ff19169055517f58f7375429b88b71c7aafaa4b1915f3ddf78e9725e737ac742f9f5a42012fef79190a250565b6001600160401b0381168114610a3e57600080fd5b60006020828403121561398857600080fd5b813561399381613961565b9392505050565b6001600160a01b0381168114610a3e57600080fd5b6000602082840312156139c157600080fd5b81356139938161399a565b6000806000606084860312156139e157600080fd5b83356139ec8161399a565b925060208401356139fc8161399a565b91506040840135613a0c81613961565b809150509250925092565b60008060408385031215613a2a57600080fd5b8235613a358161399a565b91506020830135613a458161399a565b809150509250929050565b60008060408385031215613a6357600080fd5b8235613a6e8161399a565b91506020830135613a4581613961565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613ac557600080fd5b81516139938161399a565b60208082526019908201527f4173736f63696174696f6e3a206e6f742061206d656d62657200000000000000604082015260600190565b600060208284031215613b1957600080fd5b815161399381613961565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851681830481118215151615613b6057613b60613b24565b02949350505050565b6001600160a01b039290921682526001600160401b0316602082015260400190565b6001600160401b039290921682526001600160a01b0316602082015260400190565b600060208284031215613bbf57600080fd5b5051919050565b6001600160a01b0393841681529190921660208201526001600160401b03909116604082015260600190565b600060208284031215613c0457600080fd5b8151801515811461399357600080fd5b60006001600160401b0380841680613c3c57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160401b0383811690831681811015613c6857613c68613b24565b03939250505056fea164736f6c634300080d000a",
    "sourceMap": "1824:22017:13:-:0;;;6761:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;921:32:0;719:10:9;921:18:0;:32::i;:::-;484:30:15;503:10;484:18;:30::i;:::-;6851::13;6870:10;6851:18;:30::i;:::-;6892:15;:28;;-1:-1:-1;;;;;6892:28:13;;;-1:-1:-1;;;;;;6892:28:13;;;;;;;6930:12;:22;;;;;;;;;;;1824:22017;;;;;;;;7035:3;7001:37;;7079:2;1824:22017;;;7054:27;;;1824:22017;;;7091:32;7187:4;1824:22017;;;7133:58;;;;7237:4;1824:22017;;;7208:33;7299:5;1824:22017;;;;7258:46;7323:16;:6;:16;;;;-1:-1:-1;;;;;;7323:16:13;;;;;1824:22017;;2270:187:0;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;14:155:22:-;-1:-1:-1;;;;;113:31:22;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:492::-;312:6;320;373:2;361:9;352:7;348:23;344:32;341:52;;;389:1;386;379:12;341:52;421:9;415:16;440:55;489:5;440:55;:::i;:::-;564:2;549:18;;543:25;514:5;;-1:-1:-1;577:57:22;543:25;577:57;:::i;:::-;653:7;643:17;;;174:492;;;;;:::o;:::-;1824:22017:13;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106101f95760003560e01c80639d5282641161010d578063bedf77a6116100a0578063f2fde38b1161006f578063f2fde38b1461076f578063f45b1b3a1461078f578063f857017014610839578063f96dae0a14610859578063fb0f25051461087957600080fd5b8063bedf77a6146106dd578063c1a2df4d146106fd578063d75f72b01461073c578063ec1e14cd1461074f57600080fd5b8063acfad249116100dc578063acfad24914610566578063b16b55a5146105a5578063b8ba16fd146105c5578063bc2402f1146106bd57600080fd5b80639d528264146104f35780639e14548114610513578063a0eb284614610533578063a2ec82f41461054657600080fd5b80635f34c6ff1161019057806379502c551161015f57806379502c55146103e357806383f684a41461047257806385283109146104925780638d7cc43c146104b75780638da5cb5b146104d557600080fd5b80635f34c6ff14610356578063602a898c14610376578063715018a61461039657806372f702f3146103ab57600080fd5b806328ffe6c8116101cc57806328ffe6c8146102bd5780632c636269146102dd57806332c27359146102fd57806354e858e01461031d57600080fd5b80631272f307146101fe57806314e4cbbf146102325780631e9b12ef1461025457806321887c3d14610274575b600080fd5b34801561020a57600080fd5b50600454600160401b90046001600160401b03165b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5061025261024d366004613976565b610897565b005b34801561026057600080fd5b5061025261026f3660046139af565b610927565b34801561028057600080fd5b506102ad61028f3660046139af565b6001600160a01b031660009081526001602052604090205460ff1690565b6040519015158152602001610229565b3480156102c957600080fd5b506102526102d83660046139af565b610973565b3480156102e957600080fd5b506102526102f83660046139cc565b610a41565b34801561030957600080fd5b50610252610318366004613976565b610e08565b34801561032957600080fd5b50600554600160401b90046001600160401b03165b6040516001600160401b039091168152602001610229565b34801561036257600080fd5b50610252610371366004613a17565b610e92565b34801561038257600080fd5b50610252610391366004613976565b61124c565b3480156103a257600080fd5b506102526112c5565b3480156103b757600080fd5b506002546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610229565b3480156103ef57600080fd5b50600454600554610430916001600160401b0380821692600160401b808404831693600160801b8104841693600160c01b9091048116928082169290041686565b604080516001600160401b03978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610229565b34801561047e57600080fd5b5061025261048d366004613a50565b6112fb565b34801561049e57600080fd5b50600454600160c01b90046001600160401b031661021f565b3480156104c357600080fd5b506004546001600160401b031661021f565b3480156104e157600080fd5b506000546001600160a01b03166103cb565b3480156104ff57600080fd5b5061025261050e366004613a50565b6114a0565b34801561051f57600080fd5b5061025261052e366004613a50565b611538565b610252610541366004613a50565b611671565b34801561055257600080fd5b50610252610561366004613a17565b611d39565b34801561057257600080fd5b5061033e6105813660046139af565b6001600160a01b03166000908152600660205260409020546001600160401b031690565b3480156105b157600080fd5b506102526105c0366004613a17565b612221565b3480156105d157600080fd5b5061066d6105e03660046139af565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039586168252600881528482203383528152908490208451928301855280548087168452600160a01b90046001600160401b03908116928401929092526001015490811693820193909352600160401b9092049092169181019190915290565b604051610229919081516001600160a01b0390811682526020808401516001600160401b039081169184019190915260408085015190911690830152606092830151169181019190915260800190565b3480156106c957600080fd5b506102526106d8366004613a50565b6123d4565b3480156106e957600080fd5b506102526106f83660046139af565b612757565b34801561070957600080fd5b5061033e6107183660046139af565b6001600160a01b03166000908152600760205260409020546001600160401b031690565b61025261074a3660046139cc565b61282c565b34801561075b57600080fd5b5061025261076a366004613976565b6130a4565b34801561077b57600080fd5b5061025261078a3660046139af565b61311d565b34801561079b57600080fd5b5061066d6107aa366004613a17565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b03958616825260088152848220968616825295865283902083519182018452805480861683526001600160401b03600160a01b9091048116968301969096526001015494851692810192909252600160401b9093049091169181019190915290565b34801561084557600080fd5b506102526108543660046139af565b6131b5565b34801561086557600080fd5b506003546103cb906001600160a01b031681565b34801561088557600080fd5b506005546001600160401b031661021f565b6000546001600160a01b031633146108ca5760405162461bcd60e51b81526004016108c190613a7e565b60405180910390fd5b600480546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527fbaec3edc6a0db2b60692f0f33c60a4452ccd745e1491897fdcbb9e3e1ea3b1b0906020015b60405180910390a150565b6000546001600160a01b031633146109515760405162461bcd60e51b81526004016108c190613a7e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190613ab3565b6001600160a01b0316336001600160a01b031614610a355760405162461bcd60e51b815260206004820181905260248201527f436861727465723a204f6e6c7920746865206f776e65722063616e206a6f696e60448201526064016108c1565b610a3e81613229565b50565b6001600160a01b038216600090815260016020526040902054829060ff16610a7b5760405162461bcd60e51b81526004016108c190613ad0565b6001600160a01b038416600090815260016020526040902054849060ff16610ab55760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190613ab3565b6001600160a01b0316148015610bab57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190613ab3565b6001600160a01b0316145b610bc8576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03841660009081526008602090815260408083203384529091529020600101546001600160401b031615610c165760405163c2bf408960e01b815260040160405180910390fd5b6000846001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190613ab3565b90506000856001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190613b07565b610cea9086613b3a565b9050610cf882333084613278565b6040516340c10f1960e01b81526001600160a01b038716906340c10f1990610d269033908990600401613b69565b600060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526008602090815260408083203380855292529182902080546001600160401b03878116600160a01b026001600160e01b03199283168a89161717835560019092018054968e16600160401b810297909216928c169290921795909517905590517faefeb749d1725e5501298934b4f4759cef90d0c24b0eed1fb90c214556ad44f190610df79086908890613b8b565b60405180910390a450505050505050565b6000546001600160a01b03163314610e325760405162461bcd60e51b81526004016108c190613a7e565b600480546fffffffffffffffff00000000000000001916600160401b6001600160401b038416908102919091179091556040519081527f5ba5961b8b43b7d001c2783e08b1b6dcb2a909673f6c88c5c4cd395c8028b4609060200161091c565b6001600160a01b038216600090815260016020526040902054829060ff16610ecc5760405162461bcd60e51b81526004016108c190613ad0565b82610edf6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f735750806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d9190613ab3565b6001600160a01b0316336001600160a01b031614155b15610f9157604051631459e2a760e01b815260040160405180910390fd5b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffe9190613ab3565b6001600160a01b031614801561108757506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613ab3565b6001600160a01b0316145b6110a4576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03808516600090815260086020908152604080832087851684528252918290208251608081018452815480861682526001600160401b03600160a01b909104811693820193909352600190910154918216928101839052600160401b909104909216606083015261112f57604051630b59c3b760e11b815260040160405180910390fd5b6001600160a01b038581166000818152600860209081526040808320948916835293905282902060018101805467ffffffffffffffff19169055805467ffffffffffffffff60a01b1916905582820151915163060f665f60e51b8152909163c1eccbe0916111a1918891600401613b69565b600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b505050506111e68160000151858360200151613301565b846001600160a01b0316846001600160a01b0316336001600160a01b03167fe8fb1978d776ecb779ba17babed973e749d1d54a2c15fc373eaf201769264b2d8460200151856000015160405161123d929190613b8b565b60405180910390a45050505050565b6000546001600160a01b031633146112765760405162461bcd60e51b81526004016108c190613a7e565b6005805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f3e648a52a1ce96eaba60259aef1f3c6b88bf6ff12b95d394e1770fb9a5bd52199060200161091c565b6000546001600160a01b031633146112ef5760405162461bcd60e51b81526004016108c190613a7e565b6112f96000613387565b565b6000546001600160a01b031633146113255760405162461bcd60e51b81526004016108c190613a7e565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190613ab3565b6001600160a01b031614801561141b57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190613ab3565b6001600160a01b0316145b611438576040516304af518760e11b815260040160405180910390fd5b6002546040516320fda12960e21b81526001600160a01b03909116906383f684a49061146a9085908590600401613b69565b600060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146114ca5760405162461bcd60e51b81526004016108c190613a7e565b6001600160a01b038216600081815260066020908152604091829020805467ffffffffffffffff19166001600160401b03861690811790915591519182527f50fff174f24f78c9803b56b2ab967e2e6427363bb595502c9e245ae6f4dd582a91015b60405180910390a25050565b816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a9190613ab3565b6001600160a01b0316336001600160a01b03161461160b5760405162461bcd60e51b815260206004820152602860248201527f436861727465723a2063616c6c6572206973206e6f7420746865206c6973746960448201526737339037bbb732b960c11b60648201526084016108c1565b6001600160a01b038216600081815260076020908152604091829020805467ffffffffffffffff19166001600160401b03861690811790915591519182527f91e36477e9043b463463d356aa571d60f03de4caef97d6f54637c84d382ab088910161152c565b8181600080836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d89190613ab3565b604051636eb1769f60e11b81523360048201523060248201529091506001600160a01b0382169063dd62ed3e90604401602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190613bad565b91506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190613b07565b6117b99085613b3a565b905082816001600160401b031611156117f75760405163cf47918160e01b8152600481018490526001600160401b03821660248201526044016108c1565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd9061182790339030908690600401613bc6565b6020604051808303816000875af1158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190613bf2565b506001600160a01b038716600090815260016020526040902054879060ff166118a55760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190613ab3565b6001600160a01b031614801561199b57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190613ab3565b6001600160a01b0316145b6119b8576040516304af518760e11b815260040160405180910390fd5b6000886001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c9190613b07565b611a269089613b3a565b60045490915060009061271090611a46906001600160401b031684613b3a565b611a509190613c14565b90506000611a5e8284613c48565b9050611b2d8b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190613ab3565b8c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b279190613ab3565b83613301565b611ba58b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b929190613ab3565b6000546001600160a01b03165b84613301565b611bb08b33846133d7565b611bba8b836136ca565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f1990611be89033908e90600401613b69565b600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505050508a6001600160a01b0316336001600160a01b03167f637b79a48cfca6f0a37dc0be60aad9e4025862a8dbb25130041bc268b845dbe6858e6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb29190613ab3565b604051611cc0929190613b8b565b60405180910390a36003546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990611cfa9033908e90600401613b69565b600060405180830381600087803b158015611d1457600080fd5b505af1158015611d28573d6000803e3d6000fd5b505050505050505050505050505050565b6001600160a01b038216600090815260016020526040902054829060ff16611d735760405162461bcd60e51b81526004016108c190613ad0565b82611d866000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015611e1a5750806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613ab3565b6001600160a01b0316336001600160a01b031614155b15611e3857604051631459e2a760e01b815260040160405180910390fd5b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea59190613ab3565b6001600160a01b0316148015611f2e57506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190613ab3565b6001600160a01b0316145b611f4b576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03808516600090815260086020908152604080832087851684528252918290208251608081018452815480861682526001600160401b03600160a01b909104811693820193909352600190910154918216928101839052600160401b9091049092166060830152611fd657604051630b59c3b760e11b815260040160405180910390fd5b6020818101516001600160a01b038781166000908152600884526040808220928916825291909352822060018101805467ffffffffffffffff19169055805467ffffffffffffffff60a01b1916905560045490919061271090612042906001600160401b031684613b3a565b61204c9190613c14565b60608401519091506000906001600160a01b0316156120ac576001600160a01b038816600090815260076020526040902054612710906001600160401b03166120958486613c48565b61209f9190613b3a565b6120a99190613c14565b90505b6000816120b98486613c48565b6120c39190613c48565b905061210b85600001518a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b03573d6000803e3d6000fd5b6001600160401b0382161561218857612188856000015186606001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f9190613ab3565b84516121a6906121a06000546001600160a01b031690565b85613301565b6121b18989856133d7565b6121bb89846136ca565b886001600160a01b0316886001600160a01b0316336001600160a01b03167f9290abccf41a1fd5511d0f517e116ec6db6b88d24e278298ec5ed410e78fdc5387896000015160405161220e929190613b8b565b60405180910390a4505050505050505050565b6001600160a01b038216600090815260016020526040902054829060ff1661225b5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156122a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c89190613ab3565b6001600160a01b031614801561235157506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190613ab3565b6001600160a01b0316145b61236e576040516304af518760e11b815260040160405180910390fd5b60405163f940e38560e01b81523060048201526001600160a01b03838116602483015284169063f940e38590604401600060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b50505050505050565b6001600160a01b038216600090815260016020526040902054829060ff1661240e5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190613ab3565b6001600160a01b031614801561250457506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613ab3565b6001600160a01b0316145b612521576040516304af518760e11b815260040160405180910390fd5b6001600160a01b03831660009081526008602090815260408083203384529091529020600101546001600160401b03161561256f5760405163c2bf408960e01b815260040160405180910390fd5b6000836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d39190613ab3565b90506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126399190613b07565b6126439085613b3a565b905061265182333084613278565b6040516340c10f1960e01b81526001600160a01b038616906340c10f199061267f9033908890600401613b69565b600060405180830381600087803b15801561269957600080fd5b505af11580156126ad573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526008602090815260408083203380855292529182902080549487166001600160e01b031995861617600160a01b6001600160401b038881169190910291909117825560019091018054918a169190951617909355519091907fa897a0adfb1d83345bc44799624f6eb8a5c3ce6a396be5727fe5a73131618e37906127489085908790613b8b565b60405180910390a35050505050565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190613ab3565b6001600160a01b0316336001600160a01b0316146128235760405162461bcd60e51b815260206004820152602160248201527f436861727465723a204f6e6c7920746865206f776e65722063616e206c6561766044820152606560f81b60648201526084016108c1565b610a3e81613918565b8181600080836001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128939190613ab3565b604051636eb1769f60e11b81523360048201523060248201529091506001600160a01b0382169063dd62ed3e90604401602060405180830381865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129049190613bad565b91506000846001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296a9190613b07565b6129749085613b3a565b905082816001600160401b031611156129b25760405163cf47918160e01b8152600481018490526001600160401b03821660248201526044016108c1565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906129e290339030908690600401613bc6565b6020604051808303816000875af1158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190613bf2565b506001600160a01b038816600090815260016020526040902054889060ff16612a605760405162461bcd60e51b81526004016108c190613ad0565b6001600160a01b038816600090815260016020526040902054889060ff16612a9a5760405162461bcd60e51b81526004016108c190613ad0565b6003546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b079190613ab3565b6001600160a01b0316148015612b9057506002546040805163c1aadb4d60e01b8152905130926001600160a01b03169163c1aadb4d9160048083019260209291908290030181865afa158015612b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b859190613ab3565b6001600160a01b0316145b612bad576040516304af518760e11b815260040160405180910390fd5b6000612710600460000160009054906101000a90046001600160401b03168b6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2d9190613b07565b612c37908c613b3a565b612c419190613b3a565b612c4b9190613c14565b6001600160a01b038b16600081815260076020908152604080832054815163501ad8ff60e11b815291519596509294612710946001600160401b03909416938793909263a035b1fe92600480830193928290030181865afa158015612cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd89190613b07565b612ce2908e613b3a565b612cec9190613c48565b612cf69190613b3a565b612d009190613c14565b9050612e518b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d679190613ab3565b8c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc99190613ab3565b83858f6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2d9190613b07565b8f612e389190613b3a565b612e429190613c48565b612e4c9190613c48565b613301565b612e928b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b612efe8b6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef79190613ab3565b8d83613301565b612f098b33846133d7565b612f138b836136ca565b6040516340c10f1960e01b81526001600160a01b038c16906340c10f1990612f419033908e90600401613b69565b600060405180830381600087803b158015612f5b57600080fd5b505af1158015612f6f573d6000803e3d6000fd5b505050508b6001600160a01b03168b6001600160a01b0316336001600160a01b03167f1771d3ce69278ba11e6e5edcd929be62e3261792c4bedd5a574ce0d85baf1d5f8e6001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190613b07565b61301e908f613b3a565b8f6001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190613ab3565b60405161308e929190613b8b565b60405180910390a4505050505050505050505050565b6000546001600160a01b031633146130ce5760405162461bcd60e51b81526004016108c190613a7e565b6004805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fc1ad5ed84e4d9ed528071a0791de6b8afce6be9ee44264df35ace4da5b3db3d49060200161091c565b6000546001600160a01b031633146131475760405162461bcd60e51b81526004016108c190613a7e565b6001600160a01b0381166131ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c1565b610a3e81613387565b6000546001600160a01b031633146131df5760405162461bcd60e51b81526004016108c190613a7e565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fd32a31b861473b13fe3f39e61709fee5f7b0cd33d4d9ba2ea4defa83fe4b368c90600090a250565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f36f0cb8524a0bfc7156d630b8ec256e3938c229292a93292b3495fbdb1778e899190a250565b6040516323b872dd60e01b81526000906001600160a01b038616906323b872dd906132ab90879087908790600401613bc6565b6020604051808303816000875af11580156132ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ee9190613bf2565b9050806132fa57600080fd5b5050505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb906133329086908690600401613b69565b6020604051808303816000875af1158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190613bf2565b90508061338157600080fd5b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060066000856001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561341b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343f9190613ab3565b6001600160a01b0316815260208101919091526040016000908120546004546001600160401b039182169350612710918491613484918791600160401b900416613b3a565b61348e9190613b3a565b6134989190613c14565b600554909150600090612710906134b8906001600160401b031684613b3a565b6134c29190613c14565b905060006134d08284613c48565b600454909150600090612710906134f790600160801b90046001600160401b031684613b3a565b6135019190613c14565b9050600061350f8284613c48565b6002546040516302893c5b60e41b81529192506001600160a01b031690632893c5b090613542908b908690600401613b69565b600060405180830381600087803b15801561355c57600080fd5b505af1158015613570573d6000803e3d6000fd5b50505050600260009054906101000a90046001600160a01b03166001600160a01b0316632893c5b08a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fa9190613ab3565b836040518363ffffffff1660e01b8152600401613618929190613b69565b600060405180830381600087803b15801561363257600080fd5b505af1158015613646573d6000803e3d6000fd5b50506002546001600160a01b03169150632893c5b0905061366f6000546001600160a01b031690565b866040518363ffffffff1660e01b815260040161368d929190613b69565b600060405180830381600087803b1580156136a757600080fd5b505af11580156136bb573d6000803e3d6000fd5b50505050505050505050505050565b600060066000846001600160a01b031663079d09806040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137329190613ab3565b6001600160a01b0316815260208101919091526040016000908120546004546001600160401b039182169350612710918491613777918791600160c01b900416613b3a565b6137819190613b3a565b61378b9190613c14565b600554909150600090612710906137ab906001600160401b031684613b3a565b6137b59190613c14565b905060006137c38284613c48565b9050600360009054906101000a90046001600160a01b03166001600160a01b03166340c10f19876001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384b9190613ab3565b836040518363ffffffff1660e01b8152600401613869929190613b69565b600060405180830381600087803b15801561388357600080fd5b505af1158015613897573d6000803e3d6000fd5b50506003546001600160a01b031691506340c10f1990506138c06000546001600160a01b031690565b846040518363ffffffff1660e01b81526004016138de929190613b69565b600060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038116600081815260016020526040808220805460ff19169055517f58f7375429b88b71c7aafaa4b1915f3ddf78e9725e737ac742f9f5a42012fef79190a250565b6001600160401b0381168114610a3e57600080fd5b60006020828403121561398857600080fd5b813561399381613961565b9392505050565b6001600160a01b0381168114610a3e57600080fd5b6000602082840312156139c157600080fd5b81356139938161399a565b6000806000606084860312156139e157600080fd5b83356139ec8161399a565b925060208401356139fc8161399a565b91506040840135613a0c81613961565b809150509250925092565b60008060408385031215613a2a57600080fd5b8235613a358161399a565b91506020830135613a458161399a565b809150509250929050565b60008060408385031215613a6357600080fd5b8235613a6e8161399a565b91506020830135613a4581613961565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613ac557600080fd5b81516139938161399a565b60208082526019908201527f4173736f63696174696f6e3a206e6f742061206d656d62657200000000000000604082015260600190565b600060208284031215613b1957600080fd5b815161399381613961565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851681830481118215151615613b6057613b60613b24565b02949350505050565b6001600160a01b039290921682526001600160401b0316602082015260400190565b6001600160401b039290921682526001600160a01b0316602082015260400190565b600060208284031215613bbf57600080fd5b5051919050565b6001600160a01b0393841681529190921660208201526001600160401b03909116604082015260600190565b600060208284031215613c0457600080fd5b8151801515811461399357600080fd5b60006001600160401b0380841680613c3c57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160401b0383811690831681811015613c6857613c68613b24565b03939250505056fea164736f6c634300080d000a",
    "sourceMap": "1824:22017:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10396:101;;;;;;;;;;-1:-1:-1;10469:6:13;:21;-1:-1:-1;;;10469:21:13;;-1:-1:-1;;;;;10469:21:13;10396:101;;;160:25:22;;;148:2;133:18;10396:101:13;;;;;;;;9611:173;;;;;;;;;;-1:-1:-1;9611:173:13;;;;;:::i;:::-;;:::i;:::-;;8236:152;;;;;;;;;;-1:-1:-1;8236:152:13;;;;;:::i;:::-;;:::i;1363:103:15:-;;;;;;;;;;-1:-1:-1;1363:103:15;;;;;:::i;:::-;-1:-1:-1;;;;;1443:16:15;1420:4;1443:16;;;:8;:16;;;;;;;;;1363:103;;;;1491:14:22;;1484:22;1466:41;;1454:2;1439:18;1363:103:15;1326:187:22;11574:193:13;;;;;;;;;;-1:-1:-1;11574:193:13;;;;;:::i;:::-;;:::i;19192:1237::-;;;;;;;;;;-1:-1:-1;19192:1237:13;;;;;:::i;:::-;;:::i;9397:158::-;;;;;;;;;;-1:-1:-1;9397:158:13;;;;;:::i;:::-;;:::i;7717:132::-;;;;;;;;;;-1:-1:-1;7805:37:13;;-1:-1:-1;;;7805:37:13;;-1:-1:-1;;;;;7805:37:13;7717:132;;;-1:-1:-1;;;;;2290:31:22;;;2272:50;;2260:2;2245:18;7717:132:13;2128:200:22;20712:940:13;;;;;;;;;;-1:-1:-1;20712:940:13;;;;;:::i;:::-;;:::i;9888:217::-;;;;;;;;;;-1:-1:-1;9888:217:13;;;;;:::i;:::-;;:::i;1668:101:0:-;;;;;;;;;;;;;:::i;2681:39:13:-;;;;;;;;;;-1:-1:-1;2681:39:13;;;;-1:-1:-1;;;;;2681:39:13;;;;;;-1:-1:-1;;;;;2980:32:22;;;2962:51;;2950:2;2935:18;2681:39:13;2788:231:22;2829:27:13;;;;;;;;;;-1:-1:-1;2829:27:13;;;;;;-1:-1:-1;;;;;2829:27:13;;;;-1:-1:-1;;;2829:27:13;;;;;;-1:-1:-1;;;2829:27:13;;;;;-1:-1:-1;;;2829:27:13;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3354:15:22;;;3336:34;;3406:15;;;3401:2;3386:18;;3379:43;3458:15;;;3438:18;;;3431:43;;;;3510:15;;;3505:2;3490:18;;3483:43;3563:15;;3557:3;3542:19;;3535:44;3616:15;;;3610:3;3595:19;;3588:44;3286:3;3271:19;2829:27:13;3024:614:22;23670:169:13;;;;;;;;;;-1:-1:-1;23670:169:13;;;;;:::i;:::-;;:::i;10565:111::-;;;;;;;;;;-1:-1:-1;10643:6:13;:26;-1:-1:-1;;;10643:26:13;;-1:-1:-1;;;;;10643:26:13;10565:111;;10212:119;;;;;;;;;;-1:-1:-1;10294:6:13;:30;-1:-1:-1;;;;;10294:30:13;10212:119;;1036:85:0;;;;;;;;;;-1:-1:-1;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1036:85;;8441:166:13;;;;;;;;;;-1:-1:-1;8441:166:13;;;;;:::i;:::-;;:::i;9015:326::-;;;;;;;;;;-1:-1:-1;9015:326:13;;;;;:::i;:::-;;:::i;14938:1120::-;;;;;;:::i;:::-;;:::i;21729:1885::-;;;;;;;;;;-1:-1:-1;21729:1885:13;;;;;:::i;:::-;;:::i;8664:106::-;;;;;;;;;;-1:-1:-1;8664:106:13;;;;;:::i;:::-;-1:-1:-1;;;;;8741:22:13;8716:6;8741:22;;;:15;:22;;;;;;-1:-1:-1;;;;;8741:22:13;;8664:106;11297:210;;;;;;;;;;-1:-1:-1;11297:210:13;;;;;:::i;:::-;;:::i;17544:169::-;;;;;;;;;;-1:-1:-1;17544:169:13;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17678:16:13;;;;;:7;:16;;;;;17695:10;17678:28;;;;;;;;17671:35;;;;;;;;;;;;;;-1:-1:-1;;;17671:35:13;;-1:-1:-1;;;;;17671:35:13;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17671:35:13;;;;;;;;;;;;;;17544:169;;;;;;;6850:13:22;;-1:-1:-1;;;;;6846:22:22;;;6828:41;;6916:4;6904:17;;;6898:24;-1:-1:-1;;;;;6997:21:22;;;6975:20;;;6968:51;;;;7079:4;7067:17;;;7061:24;7057:33;;;7035:20;;;7028:63;7151:4;7139:17;;;7133:24;7129:33;7107:20;;;7100:63;;;;6777:3;6762:19;;6583:586;17969:1139:13;;;;;;;;;;-1:-1:-1;17969:1139:13;;;;;:::i;:::-;;:::i;11835:193::-;;;;;;;;;;-1:-1:-1;11835:193:13;;;;;:::i;:::-;;:::i;8829:130::-;;;;;;;;;;-1:-1:-1;8829:130:13;;;;;:::i;:::-;-1:-1:-1;;;;;8916:36:13;8891:6;8916:36;;;:27;:36;;;;;;-1:-1:-1;;;;;8916:36:13;;8829:130;16064:1474;;;;;;:::i;:::-;;:::i;10993:247::-;;;;;;;;;;-1:-1:-1;10993:247:13;;;;;:::i;:::-;;:::i;1918:198:0:-;;;;;;;;;;-1:-1:-1;1918:198:0;;;;;:::i;:::-;;:::i;17719:179:13:-;;;;;;;;;;-1:-1:-1;17719:179:13;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17868:16:13;;;;;:7;:16;;;;;:23;;;;;;;;;;;17861:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;17861:30:13;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17861:30:13;;;;;;;;;;;;;;17719:179;7931:226;;;;;;;;;;-1:-1:-1;7931:226:13;;;;;:::i;:::-;;:::i;2777:45::-;;;;;;;;;;-1:-1:-1;2777:45:13;;;;-1:-1:-1;;;;;2777:45:13;;;10780:109;;;;;;;;;;-1:-1:-1;10857:25:13;;-1:-1:-1;;;;;10857:25:13;10780:109;;9611:173;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;;;;;;;;;9689:6:13::1;:39:::0;;-1:-1:-1;;;;;9689:39:13::1;-1:-1:-1::0;;;;;;;;9689:39:13;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;9743:34:::1;::::0;2272:50:22;;;9743:34:13::1;::::0;2260:2:22;2245:18;9743:34:13::1;;;;;;;;9611:173:::0;:::o;8236:152::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;8356:12:13::1;:25:::0;;-1:-1:-1;;;;;;8356:25:13::1;-1:-1:-1::0;;;;;8356:25:13;;;::::1;::::0;;;::::1;::::0;;8236:152::o;11574:193::-;11663:6;-1:-1:-1;;;;;11663:12:13;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11649:28:13;:10;-1:-1:-1;;;;;11649:28:13;;11628:107;;;;-1:-1:-1;;;11628:107:13;;10608:2:22;11628:107:13;;;10590:21:22;;;10627:18;;;10620:30;10686:34;10666:18;;;10659:62;10738:18;;11628:107:13;10406:356:22;11628:107:13;11745:15;11753:6;11745:7;:15::i;:::-;11574:193;:::o;19192:1237::-;-1:-1:-1;;;;;583:16:15;;;;;;:8;:16;;;;;;19348:7:13;;583:16:15;;575:54;;;;-1:-1:-1;;;575:54:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;583:16:15;::::1;;::::0;;;:8:::1;:16;::::0;;;;;19379:7:13;;583:16:15::1;;575:54;;;;-1:-1:-1::0;;;575:54:15::1;;;;;;;:::i;:::-;7523:15:13::2;::::0;:25:::2;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::2;::::0;-1:-1:-1;;;;;7523:15:13::2;::::0;:23:::2;::::0;:25:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:15;:25:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::2;;:83;;;;-1:-1:-1::0;7576:12:13::2;::::0;:22:::2;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::2;::::0;-1:-1:-1;;;;;7576:12:13::2;::::0;:20:::2;::::0;:22:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:12;:22:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::2;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::2;;;;;;;;;;;7504:178;-1:-1:-1::0;;;;;19485:16:13;::::3;;::::0;;;:7:::3;:16;::::0;;;;;;;19502:10:::3;19485:28:::0;;;;;;;:35:::3;;::::0;-1:-1:-1;;;;;19485:35:13::3;:40:::0;19481:105:::3;;19548:27;;-1:-1:-1::0;;;19548:27:13::3;;;;;;;;;;;19481:105;19634:11;19648:7;-1:-1:-1::0;;;;;19648:25:13::3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19634:41;;19685:26;19723:7;-1:-1:-1::0;;;;;19723:13:13::3;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19714:24;::::0;:6;:24:::3;:::i;:::-;19685:53;;19748:130;19770:5;19789:10;19829:4;19849:19;19748:8;:130::i;:::-;19919:32;::::0;-1:-1:-1;;;19919:32:13;;-1:-1:-1;;;;;19919:12:13;::::3;::::0;::::3;::::0;:32:::3;::::0;19932:10:::3;::::0;19944:6;;19919:32:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;;;;;;;;19988:16:13;;::::3;;::::0;;;:7:::3;:16;::::0;;;;;;;20005:10:::3;19988:28:::0;;;;;;;;;:50;;-1:-1:-1;;;;;20048:70:13;;::::3;-1:-1:-1::0;;;20048:70:13::3;-1:-1:-1::0;;;;;;20048:70:13;;;19988:50;;::::3;20048:70:::0;::::3;::::0;;-1:-1:-1;20128:35:13;;::::3;:44:::0;;20182:46;;::::3;-1:-1:-1::0;;;20182:46:13;::::3;::::0;;;;20128:44;;::::3;20182:46:::0;;;;;;;::::3;::::0;;20244:178;;::::3;::::0;::::3;::::0;20048:70;;19988:50;;20244:178:::3;:::i;:::-;;;;;;;;19431:998;;640:1:15::1;19192:1237:13::0;;;;:::o;9397:158::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;9470:6:13::1;:34:::0;;-1:-1:-1;;9470:34:13::1;-1:-1:-1::0;;;;;;;;9470:34:13;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;9519:29:::1;::::0;2272:50:22;;;9519:29:13::1;::::0;2260:2:22;2245:18;9519:29:13::1;2128:200:22::0;20712:940:13;-1:-1:-1;;;;;583:16:15;;;;;;:8;:16;;;;;;20822:7:13;;583:16:15;;575:54;;;;-1:-1:-1;;;575:54:15;;;;;;;:::i;:::-;20863:7:13::1;20513;1082::0::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;20513:7:13::1;-1:-1:-1::0;;;;;20499:21:13::1;:10;-1:-1:-1::0;;;;;20499:21:13::1;;;:54;;;;;20538:7;-1:-1:-1::0;;;;;20538:13:13::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20524:29:13::1;:10;-1:-1:-1::0;;;;;20524:29:13::1;;;20499:54;20495:121;;;20576:29;;-1:-1:-1::0;;;20576:29:13::1;;;;;;;;;;;20495:121;7523:15:::2;::::0;:25:::2;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::2;::::0;-1:-1:-1;;;;;7523:15:13::2;::::0;:23:::2;::::0;:25:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:15;:25:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::2;;:83;;;;-1:-1:-1::0;7576:12:13::2;::::0;:22:::2;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::2;::::0;-1:-1:-1;;;;;7576:12:13::2;::::0;:20:::2;::::0;:22:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:12;:22:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::2;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::2;;;;;;;;;;;7504:178;-1:-1:-1::0;;;;;20983:16:13;;::::3;20953:27;20983:16:::0;;;:7:::3;:16;::::0;;;;;;;:23;;::::3;::::0;;;;;;;;20953:53;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;-1:-1:-1;;;;;;;;20953:53:13;;::::3;::::0;::::3;::::0;;::::3;::::0;;;;;;;::::3;::::0;;;::::3;::::0;;;;;;-1:-1:-1;;;20953:53:13;;::::3;::::0;;::::3;::::0;;;;21016:79:::3;;21062:22;;-1:-1:-1::0;;;21062:22:13::3;;;;;;;;;;;21016:79;-1:-1:-1::0;;;;;21104:16:13;;::::3;21137:1;21104:16:::0;;;:7:::3;:16;::::0;;;;;;;:23;;::::3;::::0;;;;;;;;:30:::3;::::0;::::3;:34:::0;;-1:-1:-1;;21104:34:13::3;::::0;;21148:47;;-1:-1:-1;;;;21148:47:13::3;::::0;;21268:14;;::::3;::::0;21244:39;;-1:-1:-1;;;21244:39:13;;21104:16;;21244::::3;::::0;:39:::3;::::0;21104:23;;21244:39:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;21330:118;21348:7;:21;;;21391:5;21411:7;:27;;;21330:4;:118::i;:::-;21542:7;-1:-1:-1::0;;;;;21464:181:13::3;21515:5;-1:-1:-1::0;;;;;21464:181:13::3;21491:10;-1:-1:-1::0;;;;;21464:181:13::3;;21564:7;:27;;;21613:7;:21;;;21464:181;;;;;;;:::i;:::-;;;;;;;;20915:737;640:1:15::1;20712:940:13::0;;;:::o;9888:217::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;9994:25:13;:47;;-1:-1:-1;;9994:47:13::1;-1:-1:-1::0;;;;;9994:47:13;::::1;::::0;;::::1;::::0;;;10056:42:::1;::::0;2272:50:22;;;10056:42:13::1;::::0;2260:2:22;2245:18;10056:42:13::1;2128:200:22::0;1668:101:0;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;23670:169:13:-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;7523:15:13::1;::::0;:25:::1;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::1;::::0;-1:-1:-1;;;;;7523:15:13::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::1;;:83;;;;-1:-1:-1::0;7576:12:13::1;::::0;:22:::1;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::1;::::0;-1:-1:-1;;;;;7576:12:13::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:12;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::1;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::1;;;;;;;;;;;7504:178;23800:12:::2;::::0;:32:::2;::::0;-1:-1:-1;;;23800:32:13;;-1:-1:-1;;;;;23800:12:13;;::::2;::::0;:18:::2;::::0;:32:::2;::::0;23819:4;;23825:6;;23800:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23670:169:::0;;:::o;8441:166::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8518:22:13;::::1;;::::0;;;:15:::1;:22;::::0;;;;;;;;:31;;-1:-1:-1;;8518:31:13::1;-1:-1:-1::0;;;;;8518:31:13;::::1;::::0;;::::1;::::0;;;8564:36;;2272:50:22;;;8564:36:13::1;::::0;2245:18:22;8564:36:13::1;;;;;;;;8441:166:::0;;:::o;9015:326::-;9131:7;-1:-1:-1;;;;;9131:13:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9117:29:13;:10;-1:-1:-1;;;;;9117:29:13;;9096:116;;;;-1:-1:-1;;;9096:116:13;;13475:2:22;9096:116:13;;;13457:21:22;13514:2;13494:18;;;13487:30;13553:34;13533:18;;;13526:62;-1:-1:-1;;;13604:18:22;;;13597:38;13652:19;;9096:116:13;13273:404:22;9096:116:13;-1:-1:-1;;;;;9223:36:13;;;;;;:27;:36;;;;;;;;;:50;;-1:-1:-1;;9223:50:13;-1:-1:-1;;;;;9223:50:13;;;;;;;;9288:46;;2272:50:22;;;9288:46:13;;2245:18:22;9288:46:13;2128:200:22;14938:1120:13;15054:7;15063:6;12171:15;12254:11;12268:7;-1:-1:-1;;;;;12268:25:13;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12315:42;;-1:-1:-1;;;12315:42:13;;12331:10;12315:42;;;13894:34:22;12351:4:13;13944:18:22;;;13937:43;12254:41:13;;-1:-1:-1;;;;;;12315:15:13;;;;;13829:18:22;;12315:42:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12305:52;;12368:12;12392:7;-1:-1:-1;;;;;12392:13:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12383:24;;:6;:24;:::i;:::-;12368:39;;12550:7;12542:5;-1:-1:-1;;;;;12542:15:13;;12538:111;;;12580:58;;-1:-1:-1;;;12580:58:13;;;;;14353:25:22;;;-1:-1:-1;;;;;14414:31:22;;14394:18;;;14387:59;14326:18;;12580:58:13;14180:272:22;12538:111:13;12697:52;;-1:-1:-1;;;12697:52:13;;-1:-1:-1;;;;;12697:18:13;;;;;:52;;12716:10;;12736:4;;12743:5;;12697:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;583:16:15;::::1;;::::0;;;:8:::1;:16;::::0;;;;;15093:7:13;;583:16:15::1;;575:54;;;;-1:-1:-1::0;;;575:54:15::1;;;;;;;:::i;:::-;7523:15:13::2;::::0;:25:::2;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::2;::::0;-1:-1:-1;;;;;7523:15:13::2;::::0;:23:::2;::::0;:25:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:15;:25:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::2;;:83;;;;-1:-1:-1::0;7576:12:13::2;::::0;:22:::2;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::2;::::0;-1:-1:-1;;;;;7576:12:13::2;::::0;:20:::2;::::0;:22:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:12;:22:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::2;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::2;;;;;;;;;;;7504:178;15155:12:::3;15179:7;-1:-1:-1::0;;;;;15179:13:13::3;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15170:24;::::0;:6;:24:::3;:::i;:::-;15258:6;:30:::0;15155:39;;-1:-1:-1;15226:20:13::3;::::0;15292:5:::3;::::0;15250:38:::3;::::0;-1:-1:-1;;;;;15258:30:13::3;15155:39:::0;15250:38:::3;:::i;:::-;15249:48;;;;:::i;:::-;15226:71:::0;-1:-1:-1;15307:23:13::3;15333:21;15226:71:::0;15333:5;:21:::3;:::i;:::-;15307:47;;15364:123;15382:7;-1:-1:-1::0;;;;;15382:25:13::3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15431:7;-1:-1:-1::0;;;;;15431:13:13::3;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15461:16;15364:4;:123::i;:::-;15515:66;15520:7;-1:-1:-1::0;;;;;15520:25:13::3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1082:7:0::0;1108:6;-1:-1:-1;;;;;1108:6:0;15557:7:13::3;15567:13;15515:4;:66::i;:::-;15647:59;15671:7;15680:10;15692:13;15647:23;:59::i;:::-;15716:49;15742:7;15751:13;15716:25;:49::i;:::-;15810:32;::::0;-1:-1:-1;;;15810:32:13;;-1:-1:-1;;;;;15810:12:13;::::3;::::0;::::3;::::0;:32:::3;::::0;15823:10:::3;::::0;15835:6;;15810:32:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;15913:7;-1:-1:-1::0;;;;;15858:142:13::3;15881:10;-1:-1:-1::0;;;;;15858:142:13::3;;15935:5;15962:7;-1:-1:-1::0;;;;;15962:25:13::3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15858:142;;;;;;;:::i;:::-;;;;;;;;16011:15;::::0;:40:::3;::::0;-1:-1:-1;;;16011:40:13;;-1:-1:-1;;;;;16011:15:13;;::::3;::::0;:20:::3;::::0;:40:::3;::::0;16032:10:::3;::::0;16044:6;;16011:40:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;15145:913;;;12760:1:::1;12161:620:::0;;;14938:1120;;;;:::o;21729:1885::-;-1:-1:-1;;;;;583:16:15;;;;;;:8;:16;;;;;;21839:7:13;;583:16:15;;575:54;;;;-1:-1:-1;;;575:54:15;;;;;;;:::i;:::-;21880:7:13::1;20513;1082::0::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;20513:7:13::1;-1:-1:-1::0;;;;;20499:21:13::1;:10;-1:-1:-1::0;;;;;20499:21:13::1;;;:54;;;;;20538:7;-1:-1:-1::0;;;;;20538:13:13::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20524:29:13::1;:10;-1:-1:-1::0;;;;;20524:29:13::1;;;20499:54;20495:121;;;20576:29;;-1:-1:-1::0;;;20576:29:13::1;;;;;;;;;;;20495:121;7523:15:::2;::::0;:25:::2;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::2;::::0;-1:-1:-1;;;;;7523:15:13::2;::::0;:23:::2;::::0;:25:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:15;:25:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::2;;:83;;;;-1:-1:-1::0;7576:12:13::2;::::0;:22:::2;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::2;::::0;-1:-1:-1;;;;;7576:12:13::2;::::0;:20:::2;::::0;:22:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:12;:22:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::2;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::2;;;;;;;;;;;7504:178;-1:-1:-1::0;;;;;22000:16:13;;::::3;21970:27;22000:16:::0;;;:7:::3;:16;::::0;;;;;;;:23;;::::3;::::0;;;;;;;;21970:53;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;-1:-1:-1;;;;;;;;21970:53:13;;::::3;::::0;::::3;::::0;;::::3;::::0;;;;;;;::::3;::::0;;;::::3;::::0;;;;;;-1:-1:-1;;;21970:53:13;;::::3;::::0;;::::3;::::0;;;;22033:79:::3;;22079:22;;-1:-1:-1::0;;;22079:22:13::3;;;;;;;;;;;22033:79;22150:27;::::0;;::::3;::::0;-1:-1:-1;;;;;22187:16:13;;::::3;22121:26;22187:16:::0;;;:7:::3;:16:::0;;;;;;:23;;::::3;::::0;;;;;;;;:30:::3;::::0;::::3;:34:::0;;-1:-1:-1;;22187:34:13::3;::::0;;22231:47;;-1:-1:-1;;;;22231:47:13::3;::::0;;22387:6:::3;:30:::0;22150:27;;22121:26;22421:5:::3;::::0;22353:64:::3;::::0;-1:-1:-1;;;;;22387:30:13::3;22150:27:::0;22353:64:::3;:::i;:::-;22352:74;;;;:::i;:::-;22477:15;::::0;::::3;::::0;22329:97;;-1:-1:-1;22436:23:13::3;::::0;-1:-1:-1;;;;;22477:47:13::3;::::0;22473:235:::3;;-1:-1:-1::0;;;;;22636:36:13;::::3;;::::0;;;:27:::3;:36;::::0;;;;;22692:5:::3;::::0;-1:-1:-1;;;;;22636:36:13::3;22577:35;22599:13:::0;22577:19;:35:::3;:::i;:::-;22576:96;;;;:::i;:::-;22575:122;;;;:::i;:::-;22540:157;;22473:235;22717:23;22805:16:::0;22743:47:::3;22777:13:::0;22743:19;:47:::3;:::i;:::-;:78;;;;:::i;:::-;22717:104;;22860:71;22865:7;:21;;;22896:7;-1:-1:-1::0;;;;;22896:13:13::3;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;22860:71;-1:-1:-1::0;;;;;22964:20:13;::::3;::::0;22960:192:::3;;23000:141;23022:7;:21;;;23069:7;:15;;;-1:-1:-1::0;;;;;23069:21:13::3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23000:141::-;23184:21:::0;;23179:60:::3;::::0;23215:7:::3;1082::0::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;23215:7:13::3;23225:13;23179:4;:60::i;:::-;23305:54;23329:7;23338:5;23345:13;23305:23;:54::i;:::-;23369:49;23395:7;23404:13;23369:25;:49::i;:::-;23512:7;-1:-1:-1::0;;;;;23434:173:13::3;23485:5;-1:-1:-1::0;;;;;23434:173:13::3;23461:10;-1:-1:-1::0;;;;;23434:173:13::3;;23534:19;23575:7;:21;;;23434:173;;;;;;;:::i;:::-;;;;;;;;21932:1682;;;;;640:1:15::1;21729:1885:13::0;;;:::o;11297:210::-;-1:-1:-1;;;;;583:16:15;;;;;;:8;:16;;;;;;11409:7:13;;583:16:15;;575:54;;;;-1:-1:-1;;;575:54:15;;;;;;;:::i;:::-;7523:15:13::1;::::0;:25:::1;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::1;::::0;-1:-1:-1;;;;;7523:15:13::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::1;;:83;;;;-1:-1:-1::0;7576:12:13::1;::::0;:22:::1;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::1;::::0;-1:-1:-1;;;;;7576:12:13::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:12;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::1;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::1;;;;;;;;;;;7504:178;11471:29:::2;::::0;-1:-1:-1;;;11471:29:13;;11488:4:::2;11471:29;::::0;::::2;13894:34:22::0;-1:-1:-1;;;;;13964:15:22;;;13944:18;;;13937:43;11471:16:13;::::2;::::0;::::2;::::0;13829:18:22;;11471:29:13::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11297:210:::0;;;:::o;17969:1139::-;-1:-1:-1;;;;;583:16:15;;;;;;:8;:16;;;;;;18078:7:13;;583:16:15;;575:54;;;;-1:-1:-1;;;575:54:15;;;;;;;:::i;:::-;7523:15:13::1;::::0;:25:::1;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::1;::::0;-1:-1:-1;;;;;7523:15:13::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::1;;:83;;;;-1:-1:-1::0;7576:12:13::1;::::0;:22:::1;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::1;::::0;-1:-1:-1;;;;;7576:12:13::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:12;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::1;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::1;;;;;;;;;;;7504:178;-1:-1:-1::0;;;;;18184:16:13;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;18201:10:::2;18184:28:::0;;;;;;;:35:::2;;::::0;-1:-1:-1;;;;;18184:35:13::2;:40:::0;18180:105:::2;;18247:27;;-1:-1:-1::0;;;18247:27:13::2;;;;;;;;;;;18180:105;18333:11;18347:7;-1:-1:-1::0;;;;;18347:25:13::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18333:41;;18384:26;18422:7;-1:-1:-1::0;;;;;18422:13:13::2;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18413:24;::::0;:6;:24:::2;:::i;:::-;18384:53;;18447:130;18469:5;18488:10;18528:4;18548:19;18447:8;:130::i;:::-;18618:32;::::0;-1:-1:-1;;;18618:32:13;;-1:-1:-1;;;;;18618:12:13;::::2;::::0;::::2;::::0;:32:::2;::::0;18631:10:::2;::::0;18643:6;;18618:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;;;;;;18687:16:13;;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;18704:10:::2;18687:28:::0;;;;;;;;;:50;;;;::::2;-1:-1:-1::0;;;;;;18747:70:13;;;;-1:-1:-1;;;;;;;;18747:70:13;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;18827:35:13;;::::2;:44:::0;;;;::::2;18881:67:::0;;;;;;;;18964:137;18687:16;;18704:10;18964:137:::2;::::0;::::2;::::0;18747:70;;18687:50;;18964:137:::2;:::i;:::-;;;;;;;;18130:978;;17969:1139:::0;;;:::o;11835:193::-;11925:6;-1:-1:-1;;;;;11925:12:13;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11911:28:13;:10;-1:-1:-1;;;;;11911:28:13;;11890:108;;;;-1:-1:-1;;;11890:108:13;;16218:2:22;11890:108:13;;;16200:21:22;16257:2;16237:18;;;16230:30;16296:34;16276:18;;;16269:62;-1:-1:-1;;;16347:18:22;;;16340:31;16388:19;;11890:108:13;16016:397:22;11890:108:13;12008:13;12014:6;12008:5;:13::i;16064:1474::-;16227:7;16236:6;12171:15;12254:11;12268:7;-1:-1:-1;;;;;12268:25:13;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12315:42;;-1:-1:-1;;;12315:42:13;;12331:10;12315:42;;;13894:34:22;12351:4:13;13944:18:22;;;13937:43;12254:41:13;;-1:-1:-1;;;;;;12315:15:13;;;;;13829:18:22;;12315:42:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12305:52;;12368:12;12392:7;-1:-1:-1;;;;;12392:13:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12383:24;;:6;:24;:::i;:::-;12368:39;;12550:7;12542:5;-1:-1:-1;;;;;12542:15:13;;12538:111;;;12580:58;;-1:-1:-1;;;12580:58:13;;;;;14353:25:22;;;-1:-1:-1;;;;;14414:31:22;;14394:18;;;14387:59;14326:18;;12580:58:13;14180:272:22;12538:111:13;12697:52;;-1:-1:-1;;;12697:52:13;;-1:-1:-1;;;;;12697:18:13;;;;;:52;;12716:10;;12736:4;;12743:5;;12697:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;583:16:15;::::1;;::::0;;;:8:::1;:16;::::0;;;;;16266:7:13;;583:16:15::1;;575:54;;;;-1:-1:-1::0;;;575:54:15::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;583:16:15;::::2;;::::0;;;:8:::2;:16;::::0;;;;;16297:7:13;;583:16:15::2;;575:54;;;;-1:-1:-1::0;;;575:54:15::2;;;;;;;:::i;:::-;7523:15:13::3;::::0;:25:::3;::::0;;-1:-1:-1;;;7523:25:13;;;;7552:4:::3;::::0;-1:-1:-1;;;;;7523:15:13::3;::::0;:23:::3;::::0;:25:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;:15;:25:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7523:33:13::3;;:83;;;;-1:-1:-1::0;7576:12:13::3;::::0;:22:::3;::::0;;-1:-1:-1;;;7576:22:13;;;;7602:4:::3;::::0;-1:-1:-1;;;;;7576:12:13::3;::::0;:20:::3;::::0;:22:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;:12;:22:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7576:30:13::3;;7523:83;7504:178;;7639:32;;-1:-1:-1::0;;;7639:32:13::3;;;;;;;;;;;7504:178;16380:20:::4;16479:5;16445:6;:30;;;;;;;;;;-1:-1:-1::0;;;;;16445:30:13::4;16414:7;-1:-1:-1::0;;;;;16414:13:13::4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16405:24;::::0;:6;:24:::4;:::i;:::-;16404:71;;;;:::i;:::-;16403:81;;;;:::i;:::-;-1:-1:-1::0;;;;;16580:36:13;::::4;16494:23;16580:36:::0;;;:27:::4;:36;::::0;;;;;;;;16532:15;;-1:-1:-1;;;16532:15:13;;;;16380:104;;-1:-1:-1;16494:23:13;;16620:5:::4;::::0;-1:-1:-1;;;;;16580:36:13;;::::4;::::0;16380:104;;16580:36;;16532:13:::4;::::0;:15:::4;::::0;;::::4;::::0;16580:36;16532:15;;;;;16580:36;16532:15:::4;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16523:24;::::0;:6;:24:::4;:::i;:::-;16522:54;;;;:::i;:::-;16521:95;;;;:::i;:::-;16520:105;;;;:::i;:::-;16494:131;;16636:168;16654:7;-1:-1:-1::0;;;;;16654:25:13::4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16703:7;-1:-1:-1::0;;;;;16703:13:13::4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16778:16;16762:13;16743:7;-1:-1:-1::0;;;;;16743:13:13::4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16734:6;:24;;;;:::i;:::-;16733:42;;;;:::i;:::-;:61;;;;:::i;:::-;16636:4;:168::i;:::-;16832:66;16837:7;-1:-1:-1::0;;;;;16837:25:13::4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;16832:66;16926:124;16944:7;-1:-1:-1::0;;;;;16944:25:13::4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17001:7;17024:16;16926:4;:124::i;:::-;17116:59;17140:7;17149:10;17161:13;17116:23;:59::i;:::-;17185:49;17211:7;17220:13;17185:25;:49::i;:::-;17279:32;::::0;-1:-1:-1;;;17279:32:13;;-1:-1:-1;;;;;17279:12:13;::::4;::::0;::::4;::::0;:32:::4;::::0;17292:10:::4;::::0;17304:6;;17279:32:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;17423:7;-1:-1:-1::0;;;;;17327:204:13::4;17393:7;-1:-1:-1::0;;;;;17327:204:13::4;17361:10;-1:-1:-1::0;;;;;17327:204:13::4;;17455:7;-1:-1:-1::0;;;;;17455:13:13::4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17446:24;::::0;:6;:24:::4;:::i;:::-;17493:7;-1:-1:-1::0;;;;;17493:25:13::4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17327:204;;;;;;;:::i;:::-;;;;;;;;16349:1189;;640:1:15::2;12760::13::1;12161:620:::0;;;16064:1474;;;;;:::o;10993:247::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;11109:6:13::1;:57:::0;;-1:-1:-1;;11109:57:13::1;-1:-1:-1::0;;;;;11109:57:13;::::1;::::0;;::::1;::::0;;;11181:52:::1;::::0;2272:50:22;;;11181:52:13::1;::::0;2260:2:22;2245:18;11181:52:13::1;2128:200:22::0;1918:198:0;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;16620:2:22;1998:73:0::1;::::0;::::1;16602:21:22::0;16659:2;16639:18;;;16632:30;16698:34;16678:18;;;16671:62;-1:-1:-1;;;16749:18:22;;;16742:36;16795:19;;1998:73:0::1;16418:402:22::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;7931:226:13:-:0;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;8060:15:13::1;:31:::0;;-1:-1:-1;;;;;;8060:31:13::1;-1:-1:-1::0;;;;;8060:31:13;::::1;::::0;;::::1;::::0;;;8106:44:::1;::::0;::::1;::::0;-1:-1:-1;;8106:44:13::1;7931:226:::0;:::o;903:119:15:-;-1:-1:-1;;;;;954:16:15;;;;;;973:4;954:16;;;;;;;;:23;;-1:-1:-1;;954:23:15;;;;;;;992;;;954:16;992:23;903:119;:::o;12978:221:13:-;13130:36;;-1:-1:-1;;;13130:36:13;;13115:12;;-1:-1:-1;;;;;13130:18:13;;;;;:36;;13149:4;;13155:2;;13159:6;;13130:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13115:51;;13184:7;13176:16;;;;;;13105:94;12978:221;;;;:::o;12787:185::-;12913:26;;-1:-1:-1;;;12913:26:13;;12898:12;;-1:-1:-1;;;;;12913:14:13;;;;;:26;;12928:2;;12932:6;;12913:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12898:41;;12957:7;12949:16;;;;;;12888:84;12787:185;;;:::o;2270:187:0:-;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;13205:1015:13:-;13344:13;13360:15;:44;13376:7;-1:-1:-1;;;;;13376:25:13;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13360:44:13;;;;;;;;;;;;-1:-1:-1;13360:44:13;;;;13478:6;:21;-1:-1:-1;;;;;13360:44:13;;;;-1:-1:-1;13540:5:13;;13360:44;;13478:36;;13502:12;;-1:-1:-1;;;13478:21:13;;;:36;:::i;:::-;13477:59;;;;:::i;:::-;13476:69;;;;:::i;:::-;13598:25;;13452:93;;-1:-1:-1;13555:22:13;;13639:5;;13581:42;;-1:-1:-1;;;;;13598:25:13;13452:93;13581:42;:::i;:::-;13580:64;;;;:::i;:::-;13555:89;-1:-1:-1;13654:36:13;13693:32;13555:89;13693:14;:32;:::i;:::-;13810:6;:50;13654:71;;-1:-1:-1;13735:27:13;;13864:5;;13766:94;;-1:-1:-1;;;13810:50:13;;-1:-1:-1;;;;;13810:50:13;13654:71;13766:94;:::i;:::-;13765:104;;;;:::i;:::-;13735:134;-1:-1:-1;13879:25:13;13907:64;13735:134;13907:29;:64;:::i;:::-;13982:12;;:50;;-1:-1:-1;;;13982:50:13;;13879:92;;-1:-1:-1;;;;;;13982:12:13;;:17;;:50;;14000:9;;14011:20;;13982:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14062:12;;;;;;;;;-1:-1:-1;;;;;14062:12:13;-1:-1:-1;;;;;14062:17:13;;14088:7;-1:-1:-1;;;;;14088:13:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14106:18;14062:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14152:12:13;;-1:-1:-1;;;;;14152:12:13;;-1:-1:-1;14152:17:13;;-1:-1:-1;14170:7:13;1082::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;14170:7:13;14179:15;14152:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13334:886;;;;;;13205:1015;;;:::o;14226:656::-;14330:13;14346:15;:44;14362:7;-1:-1:-1;;;;;14362:25:13;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14346:44:13;;;;;;;;;;;;-1:-1:-1;14346:44:13;;;;14467:6;:26;-1:-1:-1;;;;;14346:44:13;;;;-1:-1:-1;14534:5:13;;14346:44;;14467:41;;14496:12;;-1:-1:-1;;;14467:26:13;;;:41;:::i;:::-;14466:64;;;;:::i;:::-;14465:74;;;;:::i;:::-;14592:25;;14441:98;;-1:-1:-1;14549:22:13;;14633:5;;14575:42;;-1:-1:-1;;;;;14592:25:13;14441:98;14575:42;:::i;:::-;14574:64;;;;:::i;:::-;14549:89;-1:-1:-1;14648:25:13;14676:32;14549:89;14676:14;:32;:::i;:::-;14648:60;;14718:15;;;;;;;;;-1:-1:-1;;;;;14718:15:13;-1:-1:-1;;;;;14718:20:13;;14747:7;-1:-1:-1;;;;;14747:13:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14765:18;14718:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14811:15:13;;-1:-1:-1;;;;;14811:15:13;;-1:-1:-1;14811:20:13;;-1:-1:-1;14832:7:13;1082::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;14832:7:13;14841:15;14811:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14320:562;;;;14226:656;;:::o;1028:116:15:-;-1:-1:-1;;;;;1077:16:15;;1096:5;1077:16;;;:8;:16;;;;;;:24;;-1:-1:-1;;1077:24:15;;;1116:21;;;1096:5;1116:21;1028:116;:::o;196:129:22:-;-1:-1:-1;;;;;274:5:22;270:30;263:5;260:41;250:69;;315:1;312;305:12;330:245;388:6;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:30;539:5;515:30;:::i;:::-;564:5;330:245;-1:-1:-1;;;330:245:22:o;580:152::-;-1:-1:-1;;;;;676:31:22;;666:42;;656:70;;722:1;719;712:12;737:296;824:6;877:2;865:9;856:7;852:23;848:32;845:52;;;893:1;890;883:12;845:52;932:9;919:23;951:52;997:5;951:52;:::i;1518:605::-;1630:6;1638;1646;1699:2;1687:9;1678:7;1674:23;1670:32;1667:52;;;1715:1;1712;1705:12;1667:52;1754:9;1741:23;1773:52;1819:5;1773:52;:::i;:::-;1844:5;-1:-1:-1;1901:2:22;1886:18;;1873:32;1914:54;1873:32;1914:54;:::i;:::-;1987:7;-1:-1:-1;2046:2:22;2031:18;;2018:32;2059;2018;2059;:::i;:::-;2110:7;2100:17;;;1518:605;;;;;:::o;2333:450::-;2421:6;2429;2482:2;2470:9;2461:7;2457:23;2453:32;2450:52;;;2498:1;2495;2488:12;2450:52;2537:9;2524:23;2556:52;2602:5;2556:52;:::i;:::-;2627:5;-1:-1:-1;2684:2:22;2669:18;;2656:32;2697:54;2656:32;2697:54;:::i;:::-;2770:7;2760:17;;;2333:450;;;;;:::o;3643:407::-;3710:6;3718;3771:2;3759:9;3750:7;3746:23;3742:32;3739:52;;;3787:1;3784;3777:12;3739:52;3826:9;3813:23;3845:52;3891:5;3845:52;:::i;:::-;3916:5;-1:-1:-1;3973:2:22;3958:18;;3945:32;3986;3945;3986;:::i;9768:356::-;9970:2;9952:21;;;9989:18;;;9982:30;10048:34;10043:2;10028:18;;10021:62;10115:2;10100:18;;9768:356::o;10129:272::-;10199:6;10252:2;10240:9;10231:7;10227:23;10223:32;10220:52;;;10268:1;10265;10258:12;10220:52;10300:9;10294:16;10319:52;10365:5;10319:52;:::i;10767:349::-;10969:2;10951:21;;;11008:2;10988:18;;;10981:30;11047:27;11042:2;11027:18;;11020:55;11107:2;11092:18;;10767:349::o;11704:249::-;11773:6;11826:2;11814:9;11805:7;11801:23;11797:32;11794:52;;;11842:1;11839;11832:12;11794:52;11874:9;11868:16;11893:30;11917:5;11893:30;:::i;11958:127::-;12019:10;12014:3;12010:20;12007:1;12000:31;12050:4;12047:1;12040:15;12074:4;12071:1;12064:15;12090:270;12129:7;-1:-1:-1;;;;;12206:2:22;12203:1;12199:10;12236:2;12233:1;12229:10;12292:3;12288:2;12284:12;12279:3;12276:21;12269:3;12262:11;12255:19;12251:47;12248:73;;;12301:18;;:::i;:::-;12341:13;;12090:270;-1:-1:-1;;;;12090:270:22:o;12365:298::-;-1:-1:-1;;;;;12556:32:22;;;;12538:51;;-1:-1:-1;;;;;12625:31:22;12620:2;12605:18;;12598:59;12526:2;12511:18;;12365:298::o;12668:::-;-1:-1:-1;;;;;12859:31:22;;;;12841:50;;-1:-1:-1;;;;;12927:32:22;12922:2;12907:18;;12900:60;12829:2;12814:18;;12668:298::o;13991:184::-;14061:6;14114:2;14102:9;14093:7;14089:23;14085:32;14082:52;;;14130:1;14127;14120:12;14082:52;-1:-1:-1;14153:16:22;;13991:184;-1:-1:-1;13991:184:22:o;14457:399::-;-1:-1:-1;;;;;14714:15:22;;;14696:34;;14766:15;;;;14761:2;14746:18;;14739:43;-1:-1:-1;;;;;14818:31:22;;;14813:2;14798:18;;14791:59;14646:2;14631:18;;14457:399::o;14861:277::-;14928:6;14981:2;14969:9;14960:7;14956:23;14952:32;14949:52;;;14997:1;14994;14987:12;14949:52;15029:9;15023:16;15082:5;15075:13;15068:21;15061:5;15058:32;15048:60;;15104:1;15101;15094:12;15143:296;15182:1;-1:-1:-1;;;;;15253:2:22;15250:1;15246:10;15275:3;15265:134;;15321:10;15316:3;15312:20;15309:1;15302:31;15356:4;15353:1;15346:15;15384:4;15381:1;15374:15;15265:134;15417:10;;15413:20;;;;;15143:296;-1:-1:-1;;15143:296:22:o;15444:229::-;15483:4;-1:-1:-1;;;;;15580:10:22;;;;15550;;15602:12;;;15599:38;;;15617:18;;:::i;:::-;15654:13;;15444:229;-1:-1:-1;;;15444:229:22:o",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "has(address)": {
        "notice": "Checks if this contract has a particular member."
      },
      "purchase(address,uint64)": {
        "notice": "This message is shown to the user"
      }
    }
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "Binds listings, cashiers under a single agreement.",
    "methods": {
      "approveToken(address,uint64)": {
        "details": "Set the scalar value for a token."
      },
      "cancelTrial(address,address)": {
        "details": "Send escrowed payment back to the purchaser."
      },
      "cashierSplitOf(address)": {
        "details": "Return the cashier split for a listing."
      },
      "contributionBasisPoints()": {
        "details": "returns the % (in parts per 10,000) of which payments are returned to the charter owner"
      },
      "finishTrial(address,address)": {
        "details": "Finalize transaction and distribute tokens"
      },
      "governanceExpansion()": {
        "details": "returns the rate at which the governance expands"
      },
      "has(address)": {
        "details": "Returns true if the association has the given member.",
        "params": {
          "member": "An ownable contract that might belong to this association."
        }
      },
      "join(address)": {
        "details": "Allows a listing or cashier to join the charter"
      },
      "leave(address)": {
        "details": "Allows a listing or cashier to leave the charter"
      },
      "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."
      },
      "reserveBasisPoints()": {
        "details": "returns the % (in parts per 10,000) of every stakeExpansion that goes to the reserve"
      },
      "scalarOf(address)": {
        "details": "Returns the scalar value for a token."
      },
      "setCashierSplitOf(address,uint64)": {
        "details": "Set the cashier split for a listing."
      },
      "setContributionBasisPoints(uint64)": {
        "details": "sets the % (in parts per 10,000) of which payments are returned to the charter owner"
      },
      "setGovernanceExpansion(uint64)": {
        "details": "Set the cashier split for a listing."
      },
      "setGovernanceToken(address)": {
        "details": "allows the charter to migrate to a different governance token."
      },
      "setReserveBasisPoints(uint64)": {
        "details": "Set the % (in parts per 10,000) of every stakeExpansion that will go to the reserve."
      },
      "setStakeExpansion(uint64)": {
        "details": "Set the cashier split for a listing."
      },
      "setStakingToken(address)": {
        "details": "allows the charter to migrate to a different staking token."
      },
      "slash(address,uint64)": {
        "details": "slashes tokens from a staked address"
      },
      "stakeExpansion()": {
        "details": "returns the rate at which the charter expands"
      },
      "startTrial(address,address,uint64)": {
        "details": "Transfers listing payment to escrow with cashier."
      },
      "startTrial(address,uint64)": {
        "details": "Transfers listing payment to escrow."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "withdrawFromCashier(address,address)": {
        "details": "withdraws token funds from a cashier."
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/Charter.sol",
    "exportedSymbols": {
      "Address": [
        2382
      ],
      "App": [
        2539
      ],
      "AppBurnable": [
        2593
      ],
      "Association": [
        4902
      ],
      "Cashier": [
        2793
      ],
      "Charter": [
        4538
      ],
      "CharterConfig": [
        2820
      ],
      "CharterGovernanceToken": [
        4801
      ],
      "CharterStakingToken": [
        4752
      ],
      "Context": [
        2404
      ],
      "ERC20": [
        690
      ],
      "ERC777": [
        1884
      ],
      "Founded": [
        4641
      ],
      "FungibleLicense": [
        5132
      ],
      "IERC1820Registry": [
        2494
      ],
      "IERC20": [
        768
      ],
      "IERC20Metadata": [
        793
      ],
      "IERC777": [
        2047
      ],
      "IERC777Recipient": [
        2067
      ],
      "IERC777Sender": [
        2087
      ],
      "Limited": [
        5242
      ],
      "Listing": [
        5373
      ],
      "Math": [
        5394
      ],
      "Member": [
        5043
      ],
      "Ownable": [
        104
      ],
      "TimeDelayStakingToken": [
        5769
      ],
      "TrialDeposit": [
        2831
      ],
      "console": [
        13833
      ]
    },
    "id": 4539,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2795,
        "literals": [
          "solidity",
          "0.8",
          ".13"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:13"
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "id": 2796,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 691,
        "src": "57:64:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/ERC777.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC777/ERC777.sol",
        "id": 2797,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 1885,
        "src": "122:66:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Recipient.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC777/IERC777Recipient.sol",
        "id": 2798,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 2068,
        "src": "189:76:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "file": "openzeppelin-contracts/contracts/access/Ownable.sol",
        "id": 2799,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 105,
        "src": "266:61:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Association.sol",
        "file": "./lib/Association.sol",
        "id": 2800,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 5044,
        "src": "329:31:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Listing.sol",
        "file": "./lib/Listing.sol",
        "id": 2801,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 5374,
        "src": "361:27:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/License.sol",
        "file": "./lib/License.sol",
        "id": 2802,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 5133,
        "src": "389:27:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Stake.sol",
        "file": "./lib/Stake.sol",
        "id": 2803,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 5770,
        "src": "417:25:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/Cashier.sol",
        "file": "./Cashier.sol",
        "id": 2804,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 2794,
        "src": "443:23:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/App.sol",
        "file": "./App.sol",
        "id": 2805,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 2594,
        "src": "467:19:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/Tokens.sol",
        "file": "./Tokens.sol",
        "id": 2806,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 4802,
        "src": "487:22:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/test/console.sol",
        "file": "../test/console.sol",
        "id": 2807,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4539,
        "sourceUnit": 13834,
        "src": "510:29:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "canonicalName": "CharterConfig",
        "id": 2820,
        "members": [
          {
            "constant": false,
            "id": 2809,
            "mutability": "mutable",
            "name": "contributionBasisPoints",
            "nameLocation": "674:23:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "667:30:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2808,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "667:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2811,
            "mutability": "mutable",
            "name": "stakeExpansion",
            "nameLocation": "811:14:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "804:21:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2810,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "804:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2813,
            "mutability": "mutable",
            "name": "stakeExpansionSplitWithPurchaserBasisPoints",
            "nameLocation": "924:43:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "917:50:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2812,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "917:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2815,
            "mutability": "mutable",
            "name": "governanceExpansion",
            "nameLocation": "1081:19:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "1074:26:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2814,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1074:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2817,
            "mutability": "mutable",
            "name": "reserveBasisPoints",
            "nameLocation": "1223:18:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "1216:25:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2816,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1216:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2819,
            "mutability": "mutable",
            "name": "earningWithdrawPeriodInSeconds",
            "nameLocation": "1404:30:13",
            "nodeType": "VariableDeclaration",
            "scope": 2820,
            "src": "1397:37:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2818,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1397:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          }
        ],
        "name": "CharterConfig",
        "nameLocation": "548:13:13",
        "nodeType": "StructDefinition",
        "scope": 4539,
        "src": "541:896:13",
        "visibility": "public"
      },
      {
        "canonicalName": "TrialDeposit",
        "id": 2831,
        "members": [
          {
            "constant": false,
            "id": 2823,
            "mutability": "mutable",
            "name": "purchaseToken",
            "nameLocation": "1521:13:13",
            "nodeType": "VariableDeclaration",
            "scope": 2831,
            "src": "1515:19:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$690",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "id": 2822,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2821,
                "name": "ERC20",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 690,
                "src": "1515:5:13"
              },
              "referencedDeclaration": 690,
              "src": "1515:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$690",
                "typeString": "contract ERC20"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2825,
            "mutability": "mutable",
            "name": "purchaseTokenAmount",
            "nameLocation": "1589:19:13",
            "nodeType": "VariableDeclaration",
            "scope": 2831,
            "src": "1582:26:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2824,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1582:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2827,
            "mutability": "mutable",
            "name": "amount",
            "nameLocation": "1662:6:13",
            "nodeType": "VariableDeclaration",
            "scope": 2831,
            "src": "1655:13:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 2826,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1655:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2830,
            "mutability": "mutable",
            "name": "cashier",
            "nameLocation": "1752:7:13",
            "nodeType": "VariableDeclaration",
            "scope": 2831,
            "src": "1744:15:13",
            "stateVariable": false,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Cashier_$2793",
              "typeString": "contract Cashier"
            },
            "typeName": {
              "id": 2829,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2828,
                "name": "Cashier",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2793,
                "src": "1744:7:13"
              },
              "referencedDeclaration": 2793,
              "src": "1744:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Cashier_$2793",
                "typeString": "contract Cashier"
              }
            },
            "visibility": "internal"
          }
        ],
        "name": "TrialDeposit",
        "nameLocation": "1446:12:13",
        "nodeType": "StructDefinition",
        "scope": 4539,
        "src": "1439:323:13",
        "visibility": "public"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2833,
              "name": "Association",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 4902,
              "src": "1844:11:13"
            },
            "id": 2834,
            "nodeType": "InheritanceSpecifier",
            "src": "1844:11:13"
          }
        ],
        "canonicalName": "Charter",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2832,
          "nodeType": "StructuredDocumentation",
          "src": "1764:60:13",
          "text": "@dev Binds listings, cashiers under a single agreement."
        },
        "fullyImplemented": true,
        "id": 4538,
        "linearizedBaseContracts": [
          4538,
          4902,
          104,
          2404
        ],
        "name": "Charter",
        "nameLocation": "1833:7:13",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "documentation": {
              "id": 2835,
              "nodeType": "StructuredDocumentation",
              "src": "1862:194:13",
              "text": "Insufficient balance for transfer. Needed `required` but only\n `available` available.\n @param available balance available.\n @param required requested amount to transfer."
            },
            "errorSelector": "cf479181",
            "id": 2841,
            "name": "InsufficientBalance",
            "nameLocation": "2067:19:13",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 2840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2837,
                  "mutability": "mutable",
                  "name": "available",
                  "nameLocation": "2095:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2841,
                  "src": "2087:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2087:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2839,
                  "mutability": "mutable",
                  "name": "required",
                  "nameLocation": "2114:8:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2841,
                  "src": "2106:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2106:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2086:37:13"
            },
            "src": "2061:63:13"
          },
          {
            "documentation": {
              "id": 2842,
              "nodeType": "StructuredDocumentation",
              "src": "2130:61:13",
              "text": "No trial deposit was found for the given user and listing"
            },
            "errorSelector": "16b3876e",
            "id": 2844,
            "name": "TrialDepositNotFound",
            "nameLocation": "2202:20:13",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 2843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2222:2:13"
            },
            "src": "2196:29:13"
          },
          {
            "documentation": {
              "id": 2845,
              "nodeType": "StructuredDocumentation",
              "src": "2231:117:13",
              "text": "There is already a deposit for the given user and listing.\n Each user can only have one trial per listing."
            },
            "errorSelector": "c2bf4089",
            "id": 2847,
            "name": "ExistingTrialDepositFound",
            "nameLocation": "2359:25:13",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 2846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2384:2:13"
            },
            "src": "2353:34:13"
          },
          {
            "documentation": {
              "id": 2848,
              "nodeType": "StructuredDocumentation",
              "src": "2393:53:13",
              "text": "Caller was not the charter owner or listing owner"
            },
            "errorSelector": "1459e2a7",
            "id": 2850,
            "name": "MustBeCharterOrListingOwner",
            "nameLocation": "2457:27:13",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 2849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2484:2:13"
            },
            "src": "2451:36:13"
          },
          {
            "documentation": {
              "id": 2851,
              "nodeType": "StructuredDocumentation",
              "src": "2493:90:13",
              "text": "Either the staking token or governance token is not\n controlled by the charter."
            },
            "errorSelector": "095ea30e",
            "id": 2853,
            "name": "CharterTokensNotOwnedByCharter",
            "nameLocation": "2594:30:13",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 2852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2624:2:13"
            },
            "src": "2588:39:13"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2854,
              "nodeType": "StructuredDocumentation",
              "src": "2633:43:13",
              "text": "@dev the staking token used by cashiers"
            },
            "functionSelector": "72f702f3",
            "id": 2857,
            "mutability": "mutable",
            "name": "stakingToken",
            "nameLocation": "2708:12:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "2681:39:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
              "typeString": "contract CharterStakingToken"
            },
            "typeName": {
              "id": 2856,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2855,
                "name": "CharterStakingToken",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4752,
                "src": "2681:19:13"
              },
              "referencedDeclaration": 4752,
              "src": "2681:19:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                "typeString": "contract CharterStakingToken"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2858,
              "nodeType": "StructuredDocumentation",
              "src": "2727:45:13",
              "text": "@dev The token that controls this charter"
            },
            "functionSelector": "f96dae0a",
            "id": 2861,
            "mutability": "mutable",
            "name": "governanceToken",
            "nameLocation": "2807:15:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "2777:45:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
              "typeString": "contract CharterGovernanceToken"
            },
            "typeName": {
              "id": 2860,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2859,
                "name": "CharterGovernanceToken",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4801,
                "src": "2777:22:13"
              },
              "referencedDeclaration": 4801,
              "src": "2777:22:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                "typeString": "contract CharterGovernanceToken"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "79502c55",
            "id": 2864,
            "mutability": "mutable",
            "name": "config",
            "nameLocation": "2850:6:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "2829:27:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
              "typeString": "struct CharterConfig"
            },
            "typeName": {
              "id": 2863,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2862,
                "name": "CharterConfig",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2820,
                "src": "2829:13:13"
              },
              "referencedDeclaration": 2820,
              "src": "2829:13:13",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage_ptr",
                "typeString": "struct CharterConfig"
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2865,
              "nodeType": "StructuredDocumentation",
              "src": "2863:81:13",
              "text": " @dev Emitted when config.governence is set to `newGovernance`."
            },
            "eventSelector": "d32a31b861473b13fe3f39e61709fee5f7b0cd33d4d9ba2ea4defa83fe4b368c",
            "id": 2869,
            "name": "GovernanceTransfered",
            "nameLocation": "2955:20:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2867,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newGovernance",
                  "nameLocation": "2992:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2869,
                  "src": "2976:29:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2866,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2976:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2975:31:13"
            },
            "src": "2949:58:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2870,
              "nodeType": "StructuredDocumentation",
              "src": "3013:89:13",
              "text": " @dev Emitted when cashier split for `listing` is set to `basisPoints`."
            },
            "eventSelector": "91e36477e9043b463463d356aa571d60f03de4caef97d6f54637c84d382ab088",
            "id": 2876,
            "name": "SetCashierSplit",
            "nameLocation": "3113:15:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2872,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "3145:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2876,
                  "src": "3129:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2871,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3129:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2874,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "3161:11:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2876,
                  "src": "3154:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2873,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3154:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3128:45:13"
            },
            "src": "3107:67:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2877,
              "nodeType": "StructuredDocumentation",
              "src": "3180:65:13",
              "text": " @dev Emitted when `scalar` is set for `token`."
            },
            "eventSelector": "50fff174f24f78c9803b56b2ab967e2e6427363bb595502c9e245ae6f4dd582a",
            "id": 2883,
            "name": "ApproveToken",
            "nameLocation": "3256:12:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2879,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "3285:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2883,
                  "src": "3269:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2878,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3269:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2881,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "scalar",
                  "nameLocation": "3299:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2883,
                  "src": "3292:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2880,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3292:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3268:38:13"
            },
            "src": "3250:57:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2884,
              "nodeType": "StructuredDocumentation",
              "src": "3313:86:13",
              "text": " @dev Emitted when config.stakeExpansion is set to `stakeExpansion`."
            },
            "eventSelector": "5ba5961b8b43b7d001c2783e08b1b6dcb2a909673f6c88c5c4cd395c8028b460",
            "id": 2888,
            "name": "SetStakeExpansion",
            "nameLocation": "3410:17:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2886,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "expansion",
                  "nameLocation": "3435:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2888,
                  "src": "3428:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2885,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3428:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3427:18:13"
            },
            "src": "3404:42:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2889,
              "nodeType": "StructuredDocumentation",
              "src": "3452:96:13",
              "text": " @dev Emitted when config.governanceExpansion is set to `governanceExpansion`."
            },
            "eventSelector": "baec3edc6a0db2b60692f0f33c60a4452ccd745e1491897fdcbb9e3e1ea3b1b0",
            "id": 2893,
            "name": "SetGovernanceExpansion",
            "nameLocation": "3559:22:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2892,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2891,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "expansion",
                  "nameLocation": "3589:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "3582:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2890,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3582:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3581:18:13"
            },
            "src": "3553:47:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2894,
              "nodeType": "StructuredDocumentation",
              "src": "3606:94:13",
              "text": " @dev Emitted when config.reserveBasisPoints is set to `reserveBasisPoints`."
            },
            "eventSelector": "3e648a52a1ce96eaba60259aef1f3c6b88bf6ff12b95d394e1770fb9a5bd5219",
            "id": 2898,
            "name": "SetReserveBasisPoints",
            "nameLocation": "3711:21:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2896,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "reserveBasisPoints",
                  "nameLocation": "3740:18:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2898,
                  "src": "3733:25:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2895,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3733:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3732:27:13"
            },
            "src": "3705:55:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2899,
              "nodeType": "StructuredDocumentation",
              "src": "3766:104:13",
              "text": " @dev Emitted when config.contributionBasisPoints is set to `contributionBasisPoints`."
            },
            "eventSelector": "c1ad5ed84e4d9ed528071a0791de6b8afce6be9ee44264df35ace4da5b3db3d4",
            "id": 2903,
            "name": "SetContributionBasisPoints",
            "nameLocation": "3881:26:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2901,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "contributionBasisPoints",
                  "nameLocation": "3915:23:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2903,
                  "src": "3908:30:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2900,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3908:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3907:32:13"
            },
            "src": "3875:65:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2904,
              "nodeType": "StructuredDocumentation",
              "src": "3946:107:13",
              "text": " @dev Emitted when `buyer` buys `listing` and\n pays `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "637b79a48cfca6f0a37dc0be60aad9e4025862a8dbb25130041bc268b845dbe6",
            "id": 2914,
            "name": "Purchased",
            "nameLocation": "4064:9:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2906,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "4099:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2914,
                  "src": "4083:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2905,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4083:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2908,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "4130:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2914,
                  "src": "4114:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2907,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4114:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2910,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "4155:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2914,
                  "src": "4147:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4147:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2912,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "4182:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2914,
                  "src": "4174:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2911,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4174:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4073:128:13"
            },
            "src": "4058:144:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2915,
              "nodeType": "StructuredDocumentation",
              "src": "4208:122:13",
              "text": " @dev Emitted when `buyer` buys `listing` from `cashier` and\n pays `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "1771d3ce69278ba11e6e5edcd929be62e3261792c4bedd5a574ce0d85baf1d5f",
            "id": 2927,
            "name": "PurchasedWithCashier",
            "nameLocation": "4341:20:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2917,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "4387:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2927,
                  "src": "4371:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2916,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4371:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2919,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "4418:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2927,
                  "src": "4402:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4402:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2921,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "cashier",
                  "nameLocation": "4451:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2927,
                  "src": "4435:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4435:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2923,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "4476:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2927,
                  "src": "4468:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4468:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2925,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "4503:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2927,
                  "src": "4495:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2924,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4495:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4361:161:13"
            },
            "src": "4335:188:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2928,
              "nodeType": "StructuredDocumentation",
              "src": "4529:119:13",
              "text": " @dev Emitted when `buyer` starts trial for `listing` and\n pays `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "a897a0adfb1d83345bc44799624f6eb8a5c3ce6a396be5727fe5a73131618e37",
            "id": 2938,
            "name": "TrialStarted",
            "nameLocation": "4659:12:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2930,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "4697:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2938,
                  "src": "4681:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2929,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4681:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2932,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "4728:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2938,
                  "src": "4712:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2931,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4712:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2934,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "4753:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2938,
                  "src": "4745:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2933,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4745:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2936,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "4780:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2938,
                  "src": "4772:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4671:128:13"
            },
            "src": "4653:147:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2939,
              "nodeType": "StructuredDocumentation",
              "src": "4806:132:13",
              "text": " @dev Emitted when `buyer` starts trial for `listing` from cashier\n and pays `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "aefeb749d1725e5501298934b4f4759cef90d0c24b0eed1fb90c214556ad44f1",
            "id": 2951,
            "name": "TrialStartedWithCashier",
            "nameLocation": "4949:23:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2941,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "4998:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2951,
                  "src": "4982:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2940,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4982:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2943,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "5029:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2951,
                  "src": "5013:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5013:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2945,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "cashier",
                  "nameLocation": "5062:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2951,
                  "src": "5046:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2944,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5046:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2947,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "5087:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2951,
                  "src": "5079:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5079:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2949,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "5114:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2951,
                  "src": "5106:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2948,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5106:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4972:161:13"
            },
            "src": "4943:191:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2952,
              "nodeType": "StructuredDocumentation",
              "src": "5140:144:13",
              "text": " @dev Emitted when `sender` cancels `buyer`'s trial for `listing`\n and buyer is refunded `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "e8fb1978d776ecb779ba17babed973e749d1d54a2c15fc373eaf201769264b2d",
            "id": 2964,
            "name": "TrialCanceled",
            "nameLocation": "5295:13:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2963,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2954,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "5334:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2964,
                  "src": "5318:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5318:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2956,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "5366:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2964,
                  "src": "5350:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5350:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2958,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "5397:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2964,
                  "src": "5381:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2957,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5381:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2960,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "5422:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2964,
                  "src": "5414:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2959,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5414:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2962,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "5449:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2964,
                  "src": "5441:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5441:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5308:160:13"
            },
            "src": "5289:180:13"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2965,
              "nodeType": "StructuredDocumentation",
              "src": "5475:156:13",
              "text": " @dev Emitted when `sender` finishes `buyer`'s trial for `listing`\n and the listing's owner receives `totalPaid` of `purchaseToken`."
            },
            "eventSelector": "9290abccf41a1fd5511d0f517e116ec6db6b88d24e278298ec5ed410e78fdc53",
            "id": 2977,
            "name": "TrialFinished",
            "nameLocation": "5642:13:13",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2967,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "5681:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2977,
                  "src": "5665:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5665:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2969,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "5713:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2977,
                  "src": "5697:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5697:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2971,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "5744:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2977,
                  "src": "5728:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5728:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2973,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "totalPaid",
                  "nameLocation": "5769:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2977,
                  "src": "5761:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2972,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5761:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2975,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "purchaseToken",
                  "nameLocation": "5796:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2977,
                  "src": "5788:21:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5788:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5655:160:13"
            },
            "src": "5636:180:13"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2978,
              "nodeType": "StructuredDocumentation",
              "src": "5822:559:13",
              "text": "Every token comes with a scalar value, in parts per 10,000\n that is used to calculate how much stakeExpansion to create\n for a sale in this token.\n If the scalar is 0, then the token is \"not allowed\" or otherwise\n   won't be create stakeExpansion.\n If the scalar is 10000 (ie: 1.0), then 1 token contributed to\n   the charter will result in `stakeExpansion` new tokens.\n If the scalar is 20000 (ie 2.0) then 1 token contributed to\n   the charter will result in `2*stakeExpansion` new tokens."
            },
            "id": 2983,
            "mutability": "mutable",
            "name": "_approvedTokens",
            "nameLocation": "6419:15:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "6386:48:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
              "typeString": "mapping(contract ERC20 => uint64)"
            },
            "typeName": {
              "id": 2982,
              "keyType": {
                "id": 2980,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2979,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "6394:5:13"
                },
                "referencedDeclaration": 690,
                "src": "6394:5:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ERC20_$690",
                  "typeString": "contract ERC20"
                }
              },
              "nodeType": "Mapping",
              "src": "6386:24:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
                "typeString": "mapping(contract ERC20 => uint64)"
              },
              "valueType": {
                "id": 2981,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "6403:6:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2988,
            "mutability": "mutable",
            "name": "_cashierSplitsInBasisPoints",
            "nameLocation": "6476:27:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "6441:62:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
              "typeString": "mapping(contract Listing => uint64)"
            },
            "typeName": {
              "id": 2987,
              "keyType": {
                "id": 2985,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2984,
                  "name": "Listing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 5373,
                  "src": "6449:7:13"
                },
                "referencedDeclaration": 5373,
                "src": "6449:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Listing_$5373",
                  "typeString": "contract Listing"
                }
              },
              "nodeType": "Mapping",
              "src": "6441:26:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
                "typeString": "mapping(contract Listing => uint64)"
              },
              "valueType": {
                "id": 2986,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "6460:6:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2989,
              "nodeType": "StructuredDocumentation",
              "src": "6510:167:13",
              "text": "Mapping tracks active trials. Used to get TrialDeposit for a given\n app for a given user.\n ex) TrialDeposit deposit = _trials[listing][user];"
            },
            "id": 2997,
            "mutability": "mutable",
            "name": "_trials",
            "nameLocation": "6747:7:13",
            "nodeType": "VariableDeclaration",
            "scope": 4538,
            "src": "6682:72:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit))"
            },
            "typeName": {
              "id": 2996,
              "keyType": {
                "id": 2991,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2990,
                  "name": "AppBurnable",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2593,
                  "src": "6690:11:13"
                },
                "referencedDeclaration": 2593,
                "src": "6690:11:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_AppBurnable_$2593",
                  "typeString": "contract AppBurnable"
                }
              },
              "nodeType": "Mapping",
              "src": "6682:56:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit))"
              },
              "valueType": {
                "id": 2995,
                "keyType": {
                  "id": 2992,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "6713:7:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "6705:32:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                  "typeString": "mapping(address => struct TrialDeposit)"
                },
                "valueType": {
                  "id": 2994,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 2993,
                    "name": "TrialDeposit",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2831,
                    "src": "6724:12:13"
                  },
                  "referencedDeclaration": 2831,
                  "src": "6724:12:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage_ptr",
                    "typeString": "struct TrialDeposit"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 3063,
              "nodeType": "Block",
              "src": "6841:505:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3007,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6870:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6870:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3006,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 103,
                      "src": "6851:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 3009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6851:30:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3010,
                  "nodeType": "ExpressionStatement",
                  "src": "6851:30:13"
                },
                {
                  "expression": {
                    "id": 3013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3011,
                      "name": "governanceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2861,
                      "src": "6892:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                        "typeString": "contract CharterGovernanceToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3012,
                      "name": "governance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3000,
                      "src": "6910:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                        "typeString": "contract CharterGovernanceToken"
                      }
                    },
                    "src": "6892:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                      "typeString": "contract CharterGovernanceToken"
                    }
                  },
                  "id": 3014,
                  "nodeType": "ExpressionStatement",
                  "src": "6892:28:13"
                },
                {
                  "expression": {
                    "id": 3017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3015,
                      "name": "stakingToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2857,
                      "src": "6930:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                        "typeString": "contract CharterStakingToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3016,
                      "name": "staking",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3003,
                      "src": "6945:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                        "typeString": "contract CharterStakingToken"
                      }
                    },
                    "src": "6930:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                      "typeString": "contract CharterStakingToken"
                    }
                  },
                  "id": 3018,
                  "nodeType": "ExpressionStatement",
                  "src": "6930:22:13"
                },
                {
                  "assignments": [
                    3021
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3021,
                      "mutability": "mutable",
                      "name": "_config",
                      "nameLocation": "6984:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3063,
                      "src": "6963:28:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                        "typeString": "struct CharterConfig"
                      },
                      "typeName": {
                        "id": 3020,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3019,
                          "name": "CharterConfig",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2820,
                          "src": "6963:13:13"
                        },
                        "referencedDeclaration": 2820,
                        "src": "6963:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_storage_ptr",
                          "typeString": "struct CharterConfig"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3022,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6963:28:13"
                },
                {
                  "expression": {
                    "id": 3027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3023,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7001:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contributionBasisPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2809,
                      "src": "7001:31:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "313030",
                      "id": 3026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7035:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_100_by_1",
                        "typeString": "int_const 100"
                      },
                      "value": "100"
                    },
                    "src": "7001:37:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3028,
                  "nodeType": "ExpressionStatement",
                  "src": "7001:37:13"
                },
                {
                  "expression": {
                    "id": 3033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3029,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7054:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stakeExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2811,
                      "src": "7054:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3130",
                      "id": 3032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7079:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "src": "7054:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3034,
                  "nodeType": "ExpressionStatement",
                  "src": "7054:27:13"
                },
                {
                  "expression": {
                    "id": 3039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3035,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7091:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3037,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "governanceExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2815,
                      "src": "7091:27:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3130",
                      "id": 3038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7121:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "src": "7091:32:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3040,
                  "nodeType": "ExpressionStatement",
                  "src": "7091:32:13"
                },
                {
                  "expression": {
                    "id": 3045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3041,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7133:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3043,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stakeExpansionSplitWithPurchaserBasisPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2813,
                      "src": "7133:51:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31303030",
                      "id": 3044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7187:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000_by_1",
                        "typeString": "int_const 1000"
                      },
                      "value": "1000"
                    },
                    "src": "7133:58:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3046,
                  "nodeType": "ExpressionStatement",
                  "src": "7133:58:13"
                },
                {
                  "expression": {
                    "id": 3051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3047,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7208:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3049,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveBasisPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2817,
                      "src": "7208:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "32303030",
                      "id": 3050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7237:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2000_by_1",
                        "typeString": "int_const 2000"
                      },
                      "value": "2000"
                    },
                    "src": "7208:33:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3052,
                  "nodeType": "ExpressionStatement",
                  "src": "7208:33:13"
                },
                {
                  "expression": {
                    "id": 3057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3053,
                        "name": "_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3021,
                        "src": "7258:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                          "typeString": "struct CharterConfig memory"
                        }
                      },
                      "id": 3055,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "earningWithdrawPeriodInSeconds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2819,
                      "src": "7258:38:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3836343030",
                      "id": 3056,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7299:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "86400"
                    },
                    "src": "7258:46:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3058,
                  "nodeType": "ExpressionStatement",
                  "src": "7258:46:13"
                },
                {
                  "expression": {
                    "id": 3061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3059,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "7323:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3060,
                      "name": "_config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3021,
                      "src": "7332:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_memory_ptr",
                        "typeString": "struct CharterConfig memory"
                      }
                    },
                    "src": "7323:16:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                      "typeString": "struct CharterConfig storage ref"
                    }
                  },
                  "id": 3062,
                  "nodeType": "ExpressionStatement",
                  "src": "7323:16:13"
                }
              ]
            },
            "id": 3064,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3000,
                  "mutability": "mutable",
                  "name": "governance",
                  "nameLocation": "6796:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3064,
                  "src": "6773:33:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                    "typeString": "contract CharterGovernanceToken"
                  },
                  "typeName": {
                    "id": 2999,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2998,
                      "name": "CharterGovernanceToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4801,
                      "src": "6773:22:13"
                    },
                    "referencedDeclaration": 4801,
                    "src": "6773:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                      "typeString": "contract CharterGovernanceToken"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3003,
                  "mutability": "mutable",
                  "name": "staking",
                  "nameLocation": "6828:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3064,
                  "src": "6808:27:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                    "typeString": "contract CharterStakingToken"
                  },
                  "typeName": {
                    "id": 3002,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3001,
                      "name": "CharterStakingToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4752,
                      "src": "6808:19:13"
                    },
                    "referencedDeclaration": 4752,
                    "src": "6808:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                      "typeString": "contract CharterStakingToken"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6772:64:13"
            },
            "returnParameters": {
              "id": 3005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6841:0:13"
            },
            "scope": 4538,
            "src": "6761:585:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3086,
              "nodeType": "Block",
              "src": "7494:217:13",
              "statements": [
                {
                  "condition": {
                    "id": 3079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7521:86:13",
                    "subExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_contract$_Charter_$4538",
                              "typeString": "contract Charter"
                            },
                            "id": 3071,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 3067,
                                  "name": "governanceToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2861,
                                  "src": "7523:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                                    "typeString": "contract CharterGovernanceToken"
                                  }
                                },
                                "id": 3068,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "charter",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4552,
                                "src": "7523:23:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Charter_$4538_$",
                                  "typeString": "function () view external returns (contract Charter)"
                                }
                              },
                              "id": 3069,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7523:25:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 3070,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "7552:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            },
                            "src": "7523:33:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_contract$_Charter_$4538",
                              "typeString": "contract Charter"
                            },
                            "id": 3076,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 3072,
                                  "name": "stakingToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2857,
                                  "src": "7576:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                                    "typeString": "contract CharterStakingToken"
                                  }
                                },
                                "id": 3073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "charter",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4552,
                                "src": "7576:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Charter_$4538_$",
                                  "typeString": "function () view external returns (contract Charter)"
                                }
                              },
                              "id": 3074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7576:22:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 3075,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "7602:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            },
                            "src": "7576:30:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7523:83:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 3078,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "7522:85:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3084,
                  "nodeType": "IfStatement",
                  "src": "7504:178:13",
                  "trueBody": {
                    "id": 3083,
                    "nodeType": "Block",
                    "src": "7618:64:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3080,
                            "name": "CharterTokensNotOwnedByCharter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2853,
                            "src": "7639:30:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 3081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7639:32:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3082,
                        "nodeType": "RevertStatement",
                        "src": "7632:39:13"
                      }
                    ]
                  }
                },
                {
                  "id": 3085,
                  "nodeType": "PlaceholderStatement",
                  "src": "7691:1:13"
                }
              ]
            },
            "documentation": {
              "id": 3065,
              "nodeType": "StructuredDocumentation",
              "src": "7352:95:13",
              "text": "@dev checks if the staking and governance tokens are also\n pointing to this charter."
            },
            "id": 3087,
            "name": "onlyWithOwnedStakeAndGovTokens",
            "nameLocation": "7461:30:13",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7491:2:13"
            },
            "src": "7452:259:13",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3095,
              "nodeType": "Block",
              "src": "7788:61:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3092,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "7805:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "id": 3093,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "earningWithdrawPeriodInSeconds",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2819,
                    "src": "7805:37:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3091,
                  "id": 3094,
                  "nodeType": "Return",
                  "src": "7798:44:13"
                }
              ]
            },
            "functionSelector": "54e858e0",
            "id": 3096,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "earningWithdrawPeriodInSeconds",
            "nameLocation": "7726:30:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7756:2:13"
            },
            "returnParameters": {
              "id": 3091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3090,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3096,
                  "src": "7780:6:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3089,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7780:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7779:8:13"
            },
            "scope": 4538,
            "src": "7717:132:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3116,
              "nodeType": "Block",
              "src": "8050:107:13",
              "statements": [
                {
                  "expression": {
                    "id": 3107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3105,
                      "name": "governanceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2861,
                      "src": "8060:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                        "typeString": "contract CharterGovernanceToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3106,
                      "name": "newGovernance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3100,
                      "src": "8078:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                        "typeString": "contract CharterGovernanceToken"
                      }
                    },
                    "src": "8060:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                      "typeString": "contract CharterGovernanceToken"
                    }
                  },
                  "id": 3108,
                  "nodeType": "ExpressionStatement",
                  "src": "8060:31:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3112,
                            "name": "newGovernance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3100,
                            "src": "8135:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                              "typeString": "contract CharterGovernanceToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                              "typeString": "contract CharterGovernanceToken"
                            }
                          ],
                          "id": 3111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8127:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3110,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8127:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8127:22:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3109,
                      "name": "GovernanceTransfered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2869,
                      "src": "8106:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 3114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8106:44:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3115,
                  "nodeType": "EmitStatement",
                  "src": "8101:49:13"
                }
              ]
            },
            "documentation": {
              "id": 3097,
              "nodeType": "StructuredDocumentation",
              "src": "7855:71:13",
              "text": "@dev allows the charter to migrate to a different governance token."
            },
            "functionSelector": "f8570170",
            "id": 3117,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3103,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3102,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "8036:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "8036:9:13"
              }
            ],
            "name": "setGovernanceToken",
            "nameLocation": "7940:18:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3100,
                  "mutability": "mutable",
                  "name": "newGovernance",
                  "nameLocation": "7982:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3117,
                  "src": "7959:36:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                    "typeString": "contract CharterGovernanceToken"
                  },
                  "typeName": {
                    "id": 3099,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3098,
                      "name": "CharterGovernanceToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4801,
                      "src": "7959:22:13"
                    },
                    "referencedDeclaration": 4801,
                    "src": "7959:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                      "typeString": "contract CharterGovernanceToken"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7958:38:13"
            },
            "returnParameters": {
              "id": 3104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8050:0:13"
            },
            "scope": 4538,
            "src": "7931:226:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3130,
              "nodeType": "Block",
              "src": "8346:42:13",
              "statements": [
                {
                  "expression": {
                    "id": 3128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3126,
                      "name": "stakingToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2857,
                      "src": "8356:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                        "typeString": "contract CharterStakingToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3127,
                      "name": "newStaking",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3121,
                      "src": "8371:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                        "typeString": "contract CharterStakingToken"
                      }
                    },
                    "src": "8356:25:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                      "typeString": "contract CharterStakingToken"
                    }
                  },
                  "id": 3129,
                  "nodeType": "ExpressionStatement",
                  "src": "8356:25:13"
                }
              ]
            },
            "documentation": {
              "id": 3118,
              "nodeType": "StructuredDocumentation",
              "src": "8163:68:13",
              "text": "@dev allows the charter to migrate to a different staking token."
            },
            "functionSelector": "1e9b12ef",
            "id": 3131,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3124,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3123,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "8332:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "8332:9:13"
              }
            ],
            "name": "setStakingToken",
            "nameLocation": "8245:15:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3121,
                  "mutability": "mutable",
                  "name": "newStaking",
                  "nameLocation": "8281:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3131,
                  "src": "8261:30:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                    "typeString": "contract CharterStakingToken"
                  },
                  "typeName": {
                    "id": 3120,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3119,
                      "name": "CharterStakingToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4752,
                      "src": "8261:19:13"
                    },
                    "referencedDeclaration": 4752,
                    "src": "8261:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                      "typeString": "contract CharterStakingToken"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8260:32:13"
            },
            "returnParameters": {
              "id": 3125,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8346:0:13"
            },
            "scope": 4538,
            "src": "8236:152:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3156,
              "nodeType": "Block",
              "src": "8508:99:13",
              "statements": [
                {
                  "expression": {
                    "id": 3146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3142,
                        "name": "_approvedTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2983,
                        "src": "8518:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
                          "typeString": "mapping(contract ERC20 => uint64)"
                        }
                      },
                      "id": 3144,
                      "indexExpression": {
                        "id": 3143,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3135,
                        "src": "8534:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8518:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3145,
                      "name": "scalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3137,
                      "src": "8543:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "8518:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3147,
                  "nodeType": "ExpressionStatement",
                  "src": "8518:31:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3151,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3135,
                            "src": "8585:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 3150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8577:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3149,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8577:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8577:14:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3153,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3137,
                        "src": "8593:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3148,
                      "name": "ApproveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2883,
                      "src": "8564:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 3154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8564:36:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3155,
                  "nodeType": "EmitStatement",
                  "src": "8559:41:13"
                }
              ]
            },
            "documentation": {
              "id": 3132,
              "nodeType": "StructuredDocumentation",
              "src": "8394:42:13",
              "text": "@dev Set the scalar value for a token."
            },
            "functionSelector": "9d528264",
            "id": 3157,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3140,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3139,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "8498:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "8498:9:13"
              }
            ],
            "name": "approveToken",
            "nameLocation": "8450:12:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3135,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "8469:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3157,
                  "src": "8463:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 3134,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3133,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "8463:5:13"
                    },
                    "referencedDeclaration": 690,
                    "src": "8463:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3137,
                  "mutability": "mutable",
                  "name": "scalar",
                  "nameLocation": "8483:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3157,
                  "src": "8476:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3136,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8476:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8462:28:13"
            },
            "returnParameters": {
              "id": 3141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8508:0:13"
            },
            "scope": 4538,
            "src": "8441:166:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3170,
              "nodeType": "Block",
              "src": "8724:46:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 3166,
                      "name": "_approvedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2983,
                      "src": "8741:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
                        "typeString": "mapping(contract ERC20 => uint64)"
                      }
                    },
                    "id": 3168,
                    "indexExpression": {
                      "id": 3167,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3161,
                      "src": "8757:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8741:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3165,
                  "id": 3169,
                  "nodeType": "Return",
                  "src": "8734:29:13"
                }
              ]
            },
            "documentation": {
              "id": 3158,
              "nodeType": "StructuredDocumentation",
              "src": "8613:46:13",
              "text": "@dev Returns the scalar value for a token."
            },
            "functionSelector": "acfad249",
            "id": 3171,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scalarOf",
            "nameLocation": "8673:8:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3161,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "8688:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3171,
                  "src": "8682:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 3160,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3159,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "8682:5:13"
                    },
                    "referencedDeclaration": 690,
                    "src": "8682:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8681:13:13"
            },
            "returnParameters": {
              "id": 3165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3164,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3171,
                  "src": "8716:6:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3163,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8716:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8715:8:13"
            },
            "scope": 4538,
            "src": "8664:106:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3184,
              "nodeType": "Block",
              "src": "8899:60:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 3180,
                      "name": "_cashierSplitsInBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2988,
                      "src": "8916:27:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
                        "typeString": "mapping(contract Listing => uint64)"
                      }
                    },
                    "id": 3182,
                    "indexExpression": {
                      "id": 3181,
                      "name": "listing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3175,
                      "src": "8944:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Listing_$5373",
                        "typeString": "contract Listing"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8916:36:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3179,
                  "id": 3183,
                  "nodeType": "Return",
                  "src": "8909:43:13"
                }
              ]
            },
            "documentation": {
              "id": 3172,
              "nodeType": "StructuredDocumentation",
              "src": "8776:48:13",
              "text": "@dev Return the cashier split for a listing."
            },
            "functionSelector": "c1a2df4d",
            "id": 3185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cashierSplitOf",
            "nameLocation": "8838:14:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3175,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "8861:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3185,
                  "src": "8853:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 3174,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3173,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "8853:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "8853:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8852:17:13"
            },
            "returnParameters": {
              "id": 3179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3178,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3185,
                  "src": "8891:6:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3177,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8891:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8890:8:13"
            },
            "scope": 4538,
            "src": "8829:130:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3218,
              "nodeType": "Block",
              "src": "9086:255:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3200,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 3195,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "9117:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "9117:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3197,
                              "name": "listing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3189,
                              "src": "9131:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Listing_$5373",
                                "typeString": "contract Listing"
                              }
                            },
                            "id": 3198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 32,
                            "src": "9131:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9131:15:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9117:29:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436861727465723a2063616c6c6572206973206e6f7420746865206c697374696e67206f776e6572",
                        "id": 3201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9160:42:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_39b01dd59014f7799b14634c06c16fc9958d60b5c26db34e756c0c394c54cb23",
                          "typeString": "literal_string \"Charter: caller is not the listing owner\""
                        },
                        "value": "Charter: caller is not the listing owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_39b01dd59014f7799b14634c06c16fc9958d60b5c26db34e756c0c394c54cb23",
                          "typeString": "literal_string \"Charter: caller is not the listing owner\""
                        }
                      ],
                      "id": 3194,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9096:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9096:116:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3203,
                  "nodeType": "ExpressionStatement",
                  "src": "9096:116:13"
                },
                {
                  "expression": {
                    "id": 3208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3204,
                        "name": "_cashierSplitsInBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2988,
                        "src": "9223:27:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
                          "typeString": "mapping(contract Listing => uint64)"
                        }
                      },
                      "id": 3206,
                      "indexExpression": {
                        "id": 3205,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3189,
                        "src": "9251:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Listing_$5373",
                          "typeString": "contract Listing"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9223:36:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3207,
                      "name": "basisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3191,
                      "src": "9262:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9223:50:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3209,
                  "nodeType": "ExpressionStatement",
                  "src": "9223:50:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3213,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3189,
                            "src": "9312:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Listing_$5373",
                              "typeString": "contract Listing"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Listing_$5373",
                              "typeString": "contract Listing"
                            }
                          ],
                          "id": 3212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9304:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3211,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9304:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9304:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3215,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3191,
                        "src": "9322:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3210,
                      "name": "SetCashierSplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2876,
                      "src": "9288:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 3216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9288:46:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3217,
                  "nodeType": "EmitStatement",
                  "src": "9283:51:13"
                }
              ]
            },
            "documentation": {
              "id": 3186,
              "nodeType": "StructuredDocumentation",
              "src": "8965:45:13",
              "text": "@dev Set the cashier split for a listing."
            },
            "functionSelector": "9e145481",
            "id": 3219,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setCashierSplitOf",
            "nameLocation": "9024:17:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3189,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "9050:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3219,
                  "src": "9042:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 3188,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3187,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "9042:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "9042:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3191,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "9066:11:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3219,
                  "src": "9059:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3190,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9041:37:13"
            },
            "returnParameters": {
              "id": 3193,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9086:0:13"
            },
            "scope": 4538,
            "src": "9015:326:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3237,
              "nodeType": "Block",
              "src": "9460:95:13",
              "statements": [
                {
                  "expression": {
                    "id": 3231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3227,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2864,
                        "src": "9470:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                          "typeString": "struct CharterConfig storage ref"
                        }
                      },
                      "id": 3229,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stakeExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2811,
                      "src": "9470:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3230,
                      "name": "_expansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3222,
                      "src": "9494:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9470:34:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3232,
                  "nodeType": "ExpressionStatement",
                  "src": "9470:34:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3234,
                        "name": "_expansion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3222,
                        "src": "9537:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3233,
                      "name": "SetStakeExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2888,
                      "src": "9519:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 3235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9519:29:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3236,
                  "nodeType": "EmitStatement",
                  "src": "9514:34:13"
                }
              ]
            },
            "documentation": {
              "id": 3220,
              "nodeType": "StructuredDocumentation",
              "src": "9347:45:13",
              "text": "@dev Set the cashier split for a listing."
            },
            "functionSelector": "32c27359",
            "id": 3238,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3225,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3224,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "9450:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "9450:9:13"
              }
            ],
            "name": "setStakeExpansion",
            "nameLocation": "9406:17:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3222,
                  "mutability": "mutable",
                  "name": "_expansion",
                  "nameLocation": "9431:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3238,
                  "src": "9424:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3221,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9424:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9423:19:13"
            },
            "returnParameters": {
              "id": 3226,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9460:0:13"
            },
            "scope": 4538,
            "src": "9397:158:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3256,
              "nodeType": "Block",
              "src": "9679:105:13",
              "statements": [
                {
                  "expression": {
                    "id": 3250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3246,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2864,
                        "src": "9689:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                          "typeString": "struct CharterConfig storage ref"
                        }
                      },
                      "id": 3248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "governanceExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2815,
                      "src": "9689:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3249,
                      "name": "_expansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3241,
                      "src": "9718:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9689:39:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3251,
                  "nodeType": "ExpressionStatement",
                  "src": "9689:39:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3253,
                        "name": "_expansion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3241,
                        "src": "9766:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3252,
                      "name": "SetGovernanceExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2893,
                      "src": "9743:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 3254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9743:34:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3255,
                  "nodeType": "EmitStatement",
                  "src": "9738:39:13"
                }
              ]
            },
            "documentation": {
              "id": 3239,
              "nodeType": "StructuredDocumentation",
              "src": "9561:45:13",
              "text": "@dev Set the cashier split for a listing."
            },
            "functionSelector": "14e4cbbf",
            "id": 3257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3244,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3243,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "9669:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "9669:9:13"
              }
            ],
            "name": "setGovernanceExpansion",
            "nameLocation": "9620:22:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3241,
                  "mutability": "mutable",
                  "name": "_expansion",
                  "nameLocation": "9650:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3257,
                  "src": "9643:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3240,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9643:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9642:19:13"
            },
            "returnParameters": {
              "id": 3245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9679:0:13"
            },
            "scope": 4538,
            "src": "9611:173:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3275,
              "nodeType": "Block",
              "src": "9984:121:13",
              "statements": [
                {
                  "expression": {
                    "id": 3269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3265,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2864,
                        "src": "9994:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                          "typeString": "struct CharterConfig storage ref"
                        }
                      },
                      "id": 3267,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveBasisPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2817,
                      "src": "9994:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3268,
                      "name": "_reserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3260,
                      "src": "10022:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9994:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3270,
                  "nodeType": "ExpressionStatement",
                  "src": "9994:47:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3272,
                        "name": "_reserveBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3260,
                        "src": "10078:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3271,
                      "name": "SetReserveBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2898,
                      "src": "10056:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 3273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10056:42:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3274,
                  "nodeType": "EmitStatement",
                  "src": "10051:47:13"
                }
              ]
            },
            "documentation": {
              "id": 3258,
              "nodeType": "StructuredDocumentation",
              "src": "9790:93:13",
              "text": "@dev Set the % (in parts per 10,000) of every stakeExpansion that will go to the reserve."
            },
            "functionSelector": "602a898c",
            "id": 3276,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3263,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3262,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "9970:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "9970:9:13"
              }
            ],
            "name": "setReserveBasisPoints",
            "nameLocation": "9897:21:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3260,
                  "mutability": "mutable",
                  "name": "_reserveBasisPoints",
                  "nameLocation": "9926:19:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3276,
                  "src": "9919:26:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3259,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9919:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9918:28:13"
            },
            "returnParameters": {
              "id": 3264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9984:0:13"
            },
            "scope": 4538,
            "src": "9888:217:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3285,
              "nodeType": "Block",
              "src": "10277:54:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3282,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "10294:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "id": 3283,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contributionBasisPoints",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2809,
                    "src": "10294:30:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3281,
                  "id": 3284,
                  "nodeType": "Return",
                  "src": "10287:37:13"
                }
              ]
            },
            "documentation": {
              "id": 3277,
              "nodeType": "StructuredDocumentation",
              "src": "10111:96:13",
              "text": "@dev returns the % (in parts per 10,000) of which payments are returned to the charter owner"
            },
            "functionSelector": "8d7cc43c",
            "id": 3286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contributionBasisPoints",
            "nameLocation": "10221:23:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10244:2:13"
            },
            "returnParameters": {
              "id": 3281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3280,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3286,
                  "src": "10268:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10268:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10267:9:13"
            },
            "scope": 4538,
            "src": "10212:119:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3295,
              "nodeType": "Block",
              "src": "10452:45:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3292,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "10469:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "id": 3293,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "stakeExpansion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2811,
                    "src": "10469:21:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3291,
                  "id": 3294,
                  "nodeType": "Return",
                  "src": "10462:28:13"
                }
              ]
            },
            "documentation": {
              "id": 3287,
              "nodeType": "StructuredDocumentation",
              "src": "10337:54:13",
              "text": "@dev returns the rate at which the charter expands"
            },
            "functionSelector": "1272f307",
            "id": 3296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeExpansion",
            "nameLocation": "10405:14:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3288,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10419:2:13"
            },
            "returnParameters": {
              "id": 3291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3290,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3296,
                  "src": "10443:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3289,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10443:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10442:9:13"
            },
            "scope": 4538,
            "src": "10396:101:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3305,
              "nodeType": "Block",
              "src": "10626:50:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3302,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "10643:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "id": 3303,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "governanceExpansion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2815,
                    "src": "10643:26:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3301,
                  "id": 3304,
                  "nodeType": "Return",
                  "src": "10636:33:13"
                }
              ]
            },
            "documentation": {
              "id": 3297,
              "nodeType": "StructuredDocumentation",
              "src": "10503:57:13",
              "text": "@dev returns the rate at which the governance expands"
            },
            "functionSelector": "85283109",
            "id": 3306,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "governanceExpansion",
            "nameLocation": "10574:19:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10593:2:13"
            },
            "returnParameters": {
              "id": 3301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3300,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3306,
                  "src": "10617:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3299,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10617:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10616:9:13"
            },
            "scope": 4538,
            "src": "10565:111:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3315,
              "nodeType": "Block",
              "src": "10840:49:13",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3312,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2864,
                      "src": "10857:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                        "typeString": "struct CharterConfig storage ref"
                      }
                    },
                    "id": 3313,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveBasisPoints",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2817,
                    "src": "10857:25:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 3311,
                  "id": 3314,
                  "nodeType": "Return",
                  "src": "10850:32:13"
                }
              ]
            },
            "documentation": {
              "id": 3307,
              "nodeType": "StructuredDocumentation",
              "src": "10682:93:13",
              "text": "@dev returns the % (in parts per 10,000) of every stakeExpansion that goes to the reserve"
            },
            "functionSelector": "fb0f2505",
            "id": 3316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reserveBasisPoints",
            "nameLocation": "10789:18:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3308,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10807:2:13"
            },
            "returnParameters": {
              "id": 3311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3310,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3316,
                  "src": "10831:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3309,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10831:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10830:9:13"
            },
            "scope": 4538,
            "src": "10780:109:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3334,
              "nodeType": "Block",
              "src": "11099:141:13",
              "statements": [
                {
                  "expression": {
                    "id": 3328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3324,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2864,
                        "src": "11109:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                          "typeString": "struct CharterConfig storage ref"
                        }
                      },
                      "id": 3326,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contributionBasisPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2809,
                      "src": "11109:30:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3327,
                      "name": "_contributionBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3319,
                      "src": "11142:24:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11109:57:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3329,
                  "nodeType": "ExpressionStatement",
                  "src": "11109:57:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3331,
                        "name": "_contributionBasisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3319,
                        "src": "11208:24:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3330,
                      "name": "SetContributionBasisPoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2903,
                      "src": "11181:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 3332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11181:52:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3333,
                  "nodeType": "EmitStatement",
                  "src": "11176:57:13"
                }
              ]
            },
            "documentation": {
              "id": 3317,
              "nodeType": "StructuredDocumentation",
              "src": "10895:93:13",
              "text": "@dev sets the % (in parts per 10,000) of which payments are returned to the charter owner"
            },
            "functionSelector": "ec1e14cd",
            "id": 3335,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 3322,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3321,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "11085:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "11085:9:13"
              }
            ],
            "name": "setContributionBasisPoints",
            "nameLocation": "11002:26:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3319,
                  "mutability": "mutable",
                  "name": "_contributionBasisPoints",
                  "nameLocation": "11036:24:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3335,
                  "src": "11029:31:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3318,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11029:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11028:33:13"
            },
            "returnParameters": {
              "id": 3323,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11099:0:13"
            },
            "scope": 4538,
            "src": "10993:247:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3357,
              "nodeType": "Block",
              "src": "11461:46:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3353,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "11488:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Charter_$4538",
                          "typeString": "contract Charter"
                        }
                      },
                      {
                        "id": 3354,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3342,
                        "src": "11494:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Charter_$4538",
                          "typeString": "contract Charter"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "id": 3350,
                        "name": "cashier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3339,
                        "src": "11471:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Cashier_$2793",
                          "typeString": "contract Cashier"
                        }
                      },
                      "id": 3352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2792,
                      "src": "11471:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_Charter_$4538_$_t_contract$_ERC20_$690_$returns$__$",
                        "typeString": "function (contract Charter,contract ERC20) external"
                      }
                    },
                    "id": 3355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11471:29:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3356,
                  "nodeType": "ExpressionStatement",
                  "src": "11471:29:13"
                }
              ]
            },
            "documentation": {
              "id": 3336,
              "nodeType": "StructuredDocumentation",
              "src": "11246:46:13",
              "text": "@dev withdraws token funds from a cashier."
            },
            "functionSelector": "b16b55a5",
            "id": 3358,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3345,
                    "name": "cashier",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3339,
                    "src": "11409:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  }
                ],
                "id": 3346,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3344,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "11395:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "11395:22:13"
              },
              {
                "id": 3348,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3347,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "11426:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "11426:30:13"
              }
            ],
            "name": "withdrawFromCashier",
            "nameLocation": "11306:19:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3343,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3339,
                  "mutability": "mutable",
                  "name": "cashier",
                  "nameLocation": "11334:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3358,
                  "src": "11326:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Cashier_$2793",
                    "typeString": "contract Cashier"
                  },
                  "typeName": {
                    "id": 3338,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3337,
                      "name": "Cashier",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2793,
                      "src": "11326:7:13"
                    },
                    "referencedDeclaration": 2793,
                    "src": "11326:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3342,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "11349:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3358,
                  "src": "11343:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 3341,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3340,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "11343:5:13"
                    },
                    "referencedDeclaration": 690,
                    "src": "11343:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11325:30:13"
            },
            "returnParameters": {
              "id": 3349,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11461:0:13"
            },
            "scope": 4538,
            "src": "11297:210:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3379,
              "nodeType": "Block",
              "src": "11618:149:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 3366,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11649:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "11649:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3368,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3362,
                              "src": "11663:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Member_$5043",
                                "typeString": "contract Member"
                              }
                            },
                            "id": 3369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 32,
                            "src": "11663:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11663:14:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11649:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436861727465723a204f6e6c7920746865206f776e65722063616e206a6f696e",
                        "id": 3372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11691:34:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fd9220ba8f143559d80b860d95df00ca68aec5fd643eba5acf4ccf02f0ed497a",
                          "typeString": "literal_string \"Charter: Only the owner can join\""
                        },
                        "value": "Charter: Only the owner can join"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fd9220ba8f143559d80b860d95df00ca68aec5fd643eba5acf4ccf02f0ed497a",
                          "typeString": "literal_string \"Charter: Only the owner can join\""
                        }
                      ],
                      "id": 3365,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11628:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11628:107:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3374,
                  "nodeType": "ExpressionStatement",
                  "src": "11628:107:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3376,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3362,
                        "src": "11753:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      ],
                      "id": 3375,
                      "name": "_invite",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4867,
                      "src": "11745:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Member_$5043_$returns$__$",
                        "typeString": "function (contract Member)"
                      }
                    },
                    "id": 3377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11745:15:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3378,
                  "nodeType": "ExpressionStatement",
                  "src": "11745:15:13"
                }
              ]
            },
            "documentation": {
              "id": 3359,
              "nodeType": "StructuredDocumentation",
              "src": "11513:56:13",
              "text": "@dev Allows a listing or cashier to join the charter"
            },
            "functionSelector": "28ffe6c8",
            "id": 3380,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "nameLocation": "11583:4:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3362,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "11595:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3380,
                  "src": "11588:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 3361,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3360,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "11588:6:13"
                    },
                    "referencedDeclaration": 5043,
                    "src": "11588:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11587:15:13"
            },
            "returnParameters": {
              "id": 3364,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11618:0:13"
            },
            "scope": 4538,
            "src": "11574:193:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3401,
              "nodeType": "Block",
              "src": "11880:148:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 3388,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11911:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "11911:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3390,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3384,
                              "src": "11925:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Member_$5043",
                                "typeString": "contract Member"
                              }
                            },
                            "id": 3391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 32,
                            "src": "11925:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11925:14:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11911:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436861727465723a204f6e6c7920746865206f776e65722063616e206c65617665",
                        "id": 3394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11953:35:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e277b2e60a83149ddfd5914d934adee7ed969776c4bf4dec4980bc1f5119bfc1",
                          "typeString": "literal_string \"Charter: Only the owner can leave\""
                        },
                        "value": "Charter: Only the owner can leave"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e277b2e60a83149ddfd5914d934adee7ed969776c4bf4dec4980bc1f5119bfc1",
                          "typeString": "literal_string \"Charter: Only the owner can leave\""
                        }
                      ],
                      "id": 3387,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11890:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11890:108:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3396,
                  "nodeType": "ExpressionStatement",
                  "src": "11890:108:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3398,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3384,
                        "src": "12014:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      ],
                      "id": 3397,
                      "name": "_kick",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4887,
                      "src": "12008:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Member_$5043_$returns$__$",
                        "typeString": "function (contract Member)"
                      }
                    },
                    "id": 3399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12008:13:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3400,
                  "nodeType": "ExpressionStatement",
                  "src": "12008:13:13"
                }
              ]
            },
            "documentation": {
              "id": 3381,
              "nodeType": "StructuredDocumentation",
              "src": "11773:57:13",
              "text": "@dev Allows a listing or cashier to leave the charter"
            },
            "functionSelector": "bedf77a6",
            "id": 3402,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "leave",
            "nameLocation": "11844:5:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3384,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "11857:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3402,
                  "src": "11850:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 3383,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3382,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "11850:6:13"
                    },
                    "referencedDeclaration": 5043,
                    "src": "11850:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11849:15:13"
            },
            "returnParameters": {
              "id": 3386,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11880:0:13"
            },
            "scope": 4538,
            "src": "11835:193:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3463,
              "nodeType": "Block",
              "src": "12161:620:13",
              "statements": [
                {
                  "assignments": [
                    3411
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3411,
                      "mutability": "mutable",
                      "name": "balance",
                      "nameLocation": "12179:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3463,
                      "src": "12171:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3410,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12171:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3412,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12171:15:13"
                },
                {
                  "assignments": [
                    3415
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3415,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "12260:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3463,
                      "src": "12254:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      },
                      "typeName": {
                        "id": 3414,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3413,
                          "name": "ERC20",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 690,
                          "src": "12254:5:13"
                        },
                        "referencedDeclaration": 690,
                        "src": "12254:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3419,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 3416,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3406,
                        "src": "12268:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Listing_$5373",
                          "typeString": "contract Listing"
                        }
                      },
                      "id": 3417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenToPurchaseIn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5257,
                      "src": "12268:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                        "typeString": "function () view external returns (contract ERC20)"
                      }
                    },
                    "id": 3418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12268:27:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12254:41:13"
                },
                {
                  "expression": {
                    "id": 3430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3420,
                      "name": "balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3411,
                      "src": "12305:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 3423,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "12331:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "12331:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 3427,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "12351:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Charter_$4538",
                                "typeString": "contract Charter"
                              }
                            ],
                            "id": 3426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12343:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3425,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12343:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12343:13:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 3421,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3415,
                          "src": "12315:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$690",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 3422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "allowance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 246,
                        "src": "12315:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address,address) view external returns (uint256)"
                        }
                      },
                      "id": 3429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12315:42:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12305:52:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3431,
                  "nodeType": "ExpressionStatement",
                  "src": "12305:52:13"
                },
                {
                  "assignments": [
                    3433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3433,
                      "mutability": "mutable",
                      "name": "total",
                      "nameLocation": "12375:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3463,
                      "src": "12368:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3432,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "12368:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3439,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3434,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3408,
                      "src": "12383:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 3435,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3406,
                          "src": "12392:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Listing_$5373",
                            "typeString": "contract Listing"
                          }
                        },
                        "id": 3436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5252,
                        "src": "12392:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                          "typeString": "function () view external returns (uint64)"
                        }
                      },
                      "id": 3437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12392:15:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12383:24:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12368:39:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3440,
                      "name": "total",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3433,
                      "src": "12542:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 3441,
                      "name": "balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3411,
                      "src": "12550:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12542:15:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3449,
                  "nodeType": "IfStatement",
                  "src": "12538:111:13",
                  "trueBody": {
                    "id": 3448,
                    "nodeType": "Block",
                    "src": "12559:90:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "id": 3444,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3411,
                              "src": "12612:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3445,
                              "name": "total",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3433,
                              "src": "12631:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 3443,
                            "name": "InsufficientBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2841,
                            "src": "12580:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) pure"
                            }
                          },
                          "id": 3446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [
                            "available",
                            "required"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "12580:58:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3447,
                        "nodeType": "RevertStatement",
                        "src": "12573:65:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3453,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "12716:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "12716:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3457,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "12736:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Charter_$4538",
                              "typeString": "contract Charter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Charter_$4538",
                              "typeString": "contract Charter"
                            }
                          ],
                          "id": 3456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12728:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3455,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12728:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12728:13:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3459,
                        "name": "total",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3433,
                        "src": "12743:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3450,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3415,
                        "src": "12697:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 3452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 304,
                      "src": "12697:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 3460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12697:52:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3461,
                  "nodeType": "ExpressionStatement",
                  "src": "12697:52:13"
                },
                {
                  "id": 3462,
                  "nodeType": "PlaceholderStatement",
                  "src": "12760:1:13"
                }
              ]
            },
            "documentation": {
              "id": 3403,
              "nodeType": "StructuredDocumentation",
              "src": "12034:66:13",
              "text": "@dev reverts if the msg.sender doesn't have enough to pay with"
            },
            "id": 3464,
            "name": "requirePayment",
            "nameLocation": "12114:14:13",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3406,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "12137:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3464,
                  "src": "12129:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 3405,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3404,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "12129:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "12129:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3408,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12153:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3464,
                  "src": "12146:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3407,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "12146:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12128:32:13"
            },
            "src": "12105:676:13",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3486,
              "nodeType": "Block",
              "src": "12888:84:13",
              "statements": [
                {
                  "assignments": [
                    3475
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3475,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "12903:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3486,
                      "src": "12898:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3474,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12898:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3481,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3478,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3469,
                        "src": "12928:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3479,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3471,
                        "src": "12932:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3476,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3467,
                        "src": "12913:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 3477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 228,
                      "src": "12913:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 3480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12913:26:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12898:41:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3483,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3475,
                        "src": "12957:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3482,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12949:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12949:16:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3485,
                  "nodeType": "ExpressionStatement",
                  "src": "12949:16:13"
                }
              ]
            },
            "id": 3487,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_pay",
            "nameLocation": "12796:4:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3467,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "12816:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3487,
                  "src": "12810:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 3466,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3465,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "12810:5:13"
                    },
                    "referencedDeclaration": 690,
                    "src": "12810:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3469,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "12847:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3487,
                  "src": "12831:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3468,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12831:15:13",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3471,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12866:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3487,
                  "src": "12859:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3470,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "12859:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12800:78:13"
            },
            "returnParameters": {
              "id": 3473,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12888:0:13"
            },
            "scope": 4538,
            "src": "12787:185:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3512,
              "nodeType": "Block",
              "src": "13105:94:13",
              "statements": [
                {
                  "assignments": [
                    3500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3500,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "13120:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3512,
                      "src": "13115:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3499,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13115:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3507,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3503,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3492,
                        "src": "13149:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3504,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3494,
                        "src": "13155:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3505,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3496,
                        "src": "13159:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3501,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3490,
                        "src": "13130:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 3502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 304,
                      "src": "13130:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 3506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13130:36:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13115:51:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3509,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3500,
                        "src": "13184:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3508,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13176:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13176:16:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3511,
                  "nodeType": "ExpressionStatement",
                  "src": "13176:16:13"
                }
              ]
            },
            "id": 3513,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_payFrom",
            "nameLocation": "12987:8:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3490,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "13011:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3513,
                  "src": "13005:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 3489,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3488,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "13005:5:13"
                    },
                    "referencedDeclaration": 690,
                    "src": "13005:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3492,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "13034:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3513,
                  "src": "13026:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3491,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13026:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3494,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "13064:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3513,
                  "src": "13048:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13048:15:13",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3496,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "13083:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3513,
                  "src": "13076:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3495,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13076:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12995:100:13"
            },
            "returnParameters": {
              "id": 3498,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13105:0:13"
            },
            "scope": 4538,
            "src": "12978:221:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3603,
              "nodeType": "Block",
              "src": "13334:886:13",
              "statements": [
                {
                  "assignments": [
                    3524
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3524,
                      "mutability": "mutable",
                      "name": "scalar",
                      "nameLocation": "13351:6:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13344:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3523,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13344:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3530,
                  "initialValue": {
                    "baseExpression": {
                      "id": 3525,
                      "name": "_approvedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2983,
                      "src": "13360:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
                        "typeString": "mapping(contract ERC20 => uint64)"
                      }
                    },
                    "id": 3529,
                    "indexExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 3526,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3516,
                          "src": "13376:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Listing_$5373",
                            "typeString": "contract Listing"
                          }
                        },
                        "id": 3527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenToPurchaseIn",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5257,
                        "src": "13376:25:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                          "typeString": "function () view external returns (contract ERC20)"
                        }
                      },
                      "id": 3528,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13376:27:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13360:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13344:60:13"
                },
                {
                  "assignments": [
                    3532
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3532,
                      "mutability": "mutable",
                      "name": "totalExpansion",
                      "nameLocation": "13459:14:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13452:21:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3531,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13452:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3543,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 3536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 3533,
                                    "name": "config",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2864,
                                    "src": "13478:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                      "typeString": "struct CharterConfig storage ref"
                                    }
                                  },
                                  "id": 3534,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "stakeExpansion",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2811,
                                  "src": "13478:21:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 3535,
                                  "name": "contribution",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3520,
                                  "src": "13502:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "13478:36:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "id": 3537,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "13477:38:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 3538,
                            "name": "scalar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3524,
                            "src": "13530:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "13477:59:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3540,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13476:61:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3541,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13540:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "13476:69:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13452:93:13"
                },
                {
                  "assignments": [
                    3545
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3545,
                      "mutability": "mutable",
                      "name": "expansionToCoop",
                      "nameLocation": "13562:15:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13555:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3544,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13555:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3553,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3546,
                            "name": "totalExpansion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3532,
                            "src": "13581:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 3547,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "13598:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 3548,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reserveBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2817,
                            "src": "13598:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "13581:42:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3550,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13580:44:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13639:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "13580:64:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13555:89:13"
                },
                {
                  "assignments": [
                    3555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3555,
                      "mutability": "mutable",
                      "name": "expansionToListerAndPurchaser",
                      "nameLocation": "13661:29:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13654:36:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3554,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13654:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3559,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3556,
                      "name": "totalExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3532,
                      "src": "13693:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3557,
                      "name": "expansionToCoop",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3545,
                      "src": "13710:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "13693:32:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13654:71:13"
                },
                {
                  "assignments": [
                    3561
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3561,
                      "mutability": "mutable",
                      "name": "expansionToPurchaser",
                      "nameLocation": "13742:20:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13735:27:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3560,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13735:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3569,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3562,
                            "name": "expansionToListerAndPurchaser",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3555,
                            "src": "13766:29:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 3563,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "13810:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 3564,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakeExpansionSplitWithPurchaserBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2813,
                            "src": "13810:50:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "13766:94:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3566,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13765:96:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13864:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "13765:104:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13735:134:13"
                },
                {
                  "assignments": [
                    3571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3571,
                      "mutability": "mutable",
                      "name": "expansionToListing",
                      "nameLocation": "13886:18:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "13879:25:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3570,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13879:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3575,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3572,
                      "name": "expansionToListerAndPurchaser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3555,
                      "src": "13907:29:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3573,
                      "name": "expansionToPurchaser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3561,
                      "src": "13951:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "13907:64:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13879:92:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3579,
                        "name": "purchaser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3518,
                        "src": "14000:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3580,
                        "name": "expansionToPurchaser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3561,
                        "src": "14011:20:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3576,
                        "name": "stakingToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2857,
                        "src": "13982:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                          "typeString": "contract CharterStakingToken"
                        }
                      },
                      "id": 3578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4727,
                      "src": "13982:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64) external"
                      }
                    },
                    "id": 3581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13982:50:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3582,
                  "nodeType": "ExpressionStatement",
                  "src": "13982:50:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3588,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3516,
                                "src": "14088:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Listing_$5373",
                                  "typeString": "contract Listing"
                                }
                              },
                              "id": 3589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "14088:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14088:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14080:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3586,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14080:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14080:24:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3592,
                        "name": "expansionToListing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3571,
                        "src": "14106:18:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3583,
                        "name": "stakingToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2857,
                        "src": "14062:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                          "typeString": "contract CharterStakingToken"
                        }
                      },
                      "id": 3585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4727,
                      "src": "14062:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64) external"
                      }
                    },
                    "id": 3593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14062:63:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3594,
                  "nodeType": "ExpressionStatement",
                  "src": "14062:63:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3598,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32,
                          "src": "14170:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 3599,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14170:7:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3600,
                        "name": "expansionToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3545,
                        "src": "14179:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3595,
                        "name": "stakingToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2857,
                        "src": "14152:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                          "typeString": "contract CharterStakingToken"
                        }
                      },
                      "id": 3597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4727,
                      "src": "14152:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64) external"
                      }
                    },
                    "id": 3601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14152:43:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3602,
                  "nodeType": "ExpressionStatement",
                  "src": "14152:43:13"
                }
              ]
            },
            "id": 3604,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeStakingTokens",
            "nameLocation": "13214:23:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3516,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "13255:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3604,
                  "src": "13247:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 3515,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3514,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "13247:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "13247:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3518,
                  "mutability": "mutable",
                  "name": "purchaser",
                  "nameLocation": "13280:9:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3604,
                  "src": "13272:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13272:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3520,
                  "mutability": "mutable",
                  "name": "contribution",
                  "nameLocation": "13306:12:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3604,
                  "src": "13299:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3519,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13299:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13237:87:13"
            },
            "returnParameters": {
              "id": 3522,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13334:0:13"
            },
            "scope": 4538,
            "src": "13205:1015:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3669,
              "nodeType": "Block",
              "src": "14320:562:13",
              "statements": [
                {
                  "assignments": [
                    3613
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3613,
                      "mutability": "mutable",
                      "name": "scalar",
                      "nameLocation": "14337:6:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3669,
                      "src": "14330:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3612,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "14330:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3619,
                  "initialValue": {
                    "baseExpression": {
                      "id": 3614,
                      "name": "_approvedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2983,
                      "src": "14346:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ERC20_$690_$_t_uint64_$",
                        "typeString": "mapping(contract ERC20 => uint64)"
                      }
                    },
                    "id": 3618,
                    "indexExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 3615,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3607,
                          "src": "14362:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Listing_$5373",
                            "typeString": "contract Listing"
                          }
                        },
                        "id": 3616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenToPurchaseIn",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5257,
                        "src": "14362:25:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                          "typeString": "function () view external returns (contract ERC20)"
                        }
                      },
                      "id": 3617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14362:27:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14346:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14330:60:13"
                },
                {
                  "assignments": [
                    3621
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3621,
                      "mutability": "mutable",
                      "name": "totalExpansion",
                      "nameLocation": "14448:14:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3669,
                      "src": "14441:21:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3620,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "14441:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3632,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 3625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 3622,
                                    "name": "config",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2864,
                                    "src": "14467:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                      "typeString": "struct CharterConfig storage ref"
                                    }
                                  },
                                  "id": 3623,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "governanceExpansion",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2815,
                                  "src": "14467:26:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 3624,
                                  "name": "contribution",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3609,
                                  "src": "14496:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "14467:41:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "id": 3626,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14466:43:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 3627,
                            "name": "scalar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3613,
                            "src": "14524:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "14466:64:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3629,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14465:66:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3630,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14534:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "14465:74:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14441:98:13"
                },
                {
                  "assignments": [
                    3634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3634,
                      "mutability": "mutable",
                      "name": "expansionToCoop",
                      "nameLocation": "14556:15:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3669,
                      "src": "14549:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3633,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "14549:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3642,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3635,
                            "name": "totalExpansion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3621,
                            "src": "14575:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 3636,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "14592:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 3637,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reserveBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2817,
                            "src": "14592:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "14575:42:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3639,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14574:44:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14633:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "14574:64:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14549:89:13"
                },
                {
                  "assignments": [
                    3644
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3644,
                      "mutability": "mutable",
                      "name": "expansionToListing",
                      "nameLocation": "14655:18:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3669,
                      "src": "14648:25:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3643,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "14648:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3648,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3645,
                      "name": "totalExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3621,
                      "src": "14676:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3646,
                      "name": "expansionToCoop",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3634,
                      "src": "14693:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "14676:32:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14648:60:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3654,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3607,
                                "src": "14747:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Listing_$5373",
                                  "typeString": "contract Listing"
                                }
                              },
                              "id": 3655,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "14747:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14747:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14739:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3652,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14739:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14739:24:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3658,
                        "name": "expansionToListing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3644,
                        "src": "14765:18:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3649,
                        "name": "governanceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2861,
                        "src": "14718:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                          "typeString": "contract CharterGovernanceToken"
                        }
                      },
                      "id": 3651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4800,
                      "src": "14718:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 3659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14718:66:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3660,
                  "nodeType": "ExpressionStatement",
                  "src": "14718:66:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3664,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32,
                          "src": "14832:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 3665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14832:7:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3666,
                        "name": "expansionToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3634,
                        "src": "14841:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3661,
                        "name": "governanceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2861,
                        "src": "14811:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                          "typeString": "contract CharterGovernanceToken"
                        }
                      },
                      "id": 3663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4800,
                      "src": "14811:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 3667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14811:46:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3668,
                  "nodeType": "ExpressionStatement",
                  "src": "14811:46:13"
                }
              ]
            },
            "id": 3670,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeGovernanceToken",
            "nameLocation": "14235:25:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3607,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "14269:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3670,
                  "src": "14261:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 3606,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3605,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "14261:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "14261:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3609,
                  "mutability": "mutable",
                  "name": "contribution",
                  "nameLocation": "14285:12:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3670,
                  "src": "14278:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3608,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "14278:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14260:38:13"
            },
            "returnParameters": {
              "id": 3611,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14320:0:13"
            },
            "scope": 4538,
            "src": "14226:656:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3781,
              "nodeType": "Block",
              "src": "15145:913:13",
              "statements": [
                {
                  "assignments": [
                    3689
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3689,
                      "mutability": "mutable",
                      "name": "total",
                      "nameLocation": "15162:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3781,
                      "src": "15155:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3688,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "15155:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3695,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3690,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3676,
                      "src": "15170:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 3691,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "15179:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_App_$2539",
                            "typeString": "contract App"
                          }
                        },
                        "id": 3692,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5252,
                        "src": "15179:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                          "typeString": "function () view external returns (uint64)"
                        }
                      },
                      "id": 3693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15179:15:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15170:24:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15155:39:13"
                },
                {
                  "assignments": [
                    3697
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3697,
                      "mutability": "mutable",
                      "name": "paymentToCoop",
                      "nameLocation": "15233:13:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3781,
                      "src": "15226:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3696,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "15226:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3705,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3698,
                            "name": "total",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3689,
                            "src": "15250:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 3699,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "15258:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 3700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contributionBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2809,
                            "src": "15258:30:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "15250:38:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3702,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "15249:40:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15292:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "15249:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15226:71:13"
                },
                {
                  "assignments": [
                    3707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3707,
                      "mutability": "mutable",
                      "name": "paymentToListing",
                      "nameLocation": "15314:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3781,
                      "src": "15307:23:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3706,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "15307:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3711,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3708,
                      "name": "total",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3689,
                      "src": "15333:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3709,
                      "name": "paymentToCoop",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3697,
                      "src": "15341:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15333:21:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15307:47:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 3713,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3674,
                            "src": "15382:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          },
                          "id": 3714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenToPurchaseIn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5257,
                          "src": "15382:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 3715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15382:27:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3718,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3674,
                                "src": "15431:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_App_$2539",
                                  "typeString": "contract App"
                                }
                              },
                              "id": 3719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "15431:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3720,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15431:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15423:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 3716,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15423:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15423:24:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3722,
                        "name": "paymentToListing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3707,
                        "src": "15461:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3712,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "15364:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 3723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15364:123:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3724,
                  "nodeType": "ExpressionStatement",
                  "src": "15364:123:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 3726,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3674,
                            "src": "15520:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          },
                          "id": 3727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenToPurchaseIn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5257,
                          "src": "15520:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 3728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15520:27:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3731,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "15557:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 3732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15557:7:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15549:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 3729,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15549:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15549:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3734,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3697,
                        "src": "15567:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3725,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "15515:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 3735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15515:66:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3736,
                  "nodeType": "ExpressionStatement",
                  "src": "15515:66:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3738,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3674,
                        "src": "15671:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      {
                        "expression": {
                          "id": 3739,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "15680:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15680:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3741,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3697,
                        "src": "15692:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3737,
                      "name": "distributeStakingTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3604,
                      "src": "15647:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,address,uint64)"
                      }
                    },
                    "id": 3742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15647:59:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3743,
                  "nodeType": "ExpressionStatement",
                  "src": "15647:59:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3745,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3674,
                        "src": "15742:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      {
                        "id": 3746,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3697,
                        "src": "15751:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3744,
                      "name": "distributeGovernanceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3670,
                      "src": "15716:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,uint64)"
                      }
                    },
                    "id": 3747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15716:49:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3748,
                  "nodeType": "ExpressionStatement",
                  "src": "15716:49:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3752,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "15823:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15823:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3754,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3676,
                        "src": "15835:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3749,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3674,
                        "src": "15810:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      "id": 3751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5068,
                      "src": "15810:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 3755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15810:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3756,
                  "nodeType": "ExpressionStatement",
                  "src": "15810:32:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3758,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "15881:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15881:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3762,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3674,
                            "src": "15913:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          ],
                          "id": 3761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15905:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3760,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15905:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15905:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3764,
                        "name": "total",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3689,
                        "src": "15935:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3767,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3674,
                                "src": "15962:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_App_$2539",
                                  "typeString": "contract App"
                                }
                              },
                              "id": 3768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenToPurchaseIn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5257,
                              "src": "15962:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                                "typeString": "function () view external returns (contract ERC20)"
                              }
                            },
                            "id": 3769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15962:27:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 3766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15954:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3765,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15954:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15954:36:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3757,
                      "name": "Purchased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2914,
                      "src": "15858:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,uint256,address)"
                      }
                    },
                    "id": 3771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15858:142:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3772,
                  "nodeType": "EmitStatement",
                  "src": "15853:147:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3776,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "16032:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3777,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "16032:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3778,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3676,
                        "src": "16044:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3773,
                        "name": "governanceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2861,
                        "src": "16011:15:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterGovernanceToken_$4801",
                          "typeString": "contract CharterGovernanceToken"
                        }
                      },
                      "id": 3775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4800,
                      "src": "16011:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 3779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16011:40:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3780,
                  "nodeType": "ExpressionStatement",
                  "src": "16011:40:13"
                }
              ]
            },
            "documentation": {
              "id": 3671,
              "nodeType": "StructuredDocumentation",
              "src": "14888:45:13",
              "text": "@notice This message is shown to the user"
            },
            "functionSelector": "a0eb2846",
            "id": 3782,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3679,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3674,
                    "src": "15054:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  },
                  {
                    "id": 3680,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3676,
                    "src": "15063:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 3681,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3678,
                  "name": "requirePayment",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3464,
                  "src": "15039:14:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "15039:31:13"
              },
              {
                "arguments": [
                  {
                    "id": 3683,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3674,
                    "src": "15093:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  }
                ],
                "id": 3684,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3682,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "15079:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "15079:22:13"
              },
              {
                "id": 3686,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3685,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "15110:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "15110:30:13"
              }
            ],
            "name": "purchase",
            "nameLocation": "14947:8:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3674,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "14960:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3782,
                  "src": "14956:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$2539",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "id": 3673,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3672,
                      "name": "App",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2539,
                      "src": "14956:3:13"
                    },
                    "referencedDeclaration": 2539,
                    "src": "14956:3:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3676,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "14976:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3782,
                  "src": "14969:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3675,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "14969:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14955:28:13"
            },
            "returnParameters": {
              "id": 3687,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15145:0:13"
            },
            "scope": 4538,
            "src": "14938:1120:13",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3932,
              "nodeType": "Block",
              "src": "16349:1189:13",
              "statements": [
                {
                  "assignments": [
                    3806
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3806,
                      "mutability": "mutable",
                      "name": "paymentToCoop",
                      "nameLocation": "16387:13:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3932,
                      "src": "16380:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3805,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "16380:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3819,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 3811,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3807,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3790,
                                  "src": "16405:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 3808,
                                      "name": "listing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3788,
                                      "src": "16414:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_App_$2539",
                                        "typeString": "contract App"
                                      }
                                    },
                                    "id": 3809,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "price",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5252,
                                    "src": "16414:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                                      "typeString": "function () view external returns (uint64)"
                                    }
                                  },
                                  "id": 3810,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16414:15:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "16405:24:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "id": 3812,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "16404:26:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 3813,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "16445:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 3814,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contributionBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2809,
                            "src": "16445:30:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "16404:71:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3816,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "16403:73:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3817,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16479:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "16403:81:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16380:104:13"
                },
                {
                  "assignments": [
                    3821
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3821,
                      "mutability": "mutable",
                      "name": "paymentToCashier",
                      "nameLocation": "16501:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 3932,
                      "src": "16494:23:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 3820,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "16494:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3838,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 3829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      },
                                      "id": 3826,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3822,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3790,
                                        "src": "16523:6:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 3823,
                                            "name": "listing",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3788,
                                            "src": "16532:7:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_App_$2539",
                                              "typeString": "contract App"
                                            }
                                          },
                                          "id": 3824,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "price",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 5252,
                                          "src": "16532:13:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                                            "typeString": "function () view external returns (uint64)"
                                          }
                                        },
                                        "id": 3825,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16532:15:13",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "src": "16523:24:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    }
                                  ],
                                  "id": 3827,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "16522:26:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 3828,
                                  "name": "paymentToCoop",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3806,
                                  "src": "16563:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "16522:54:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "id": 3830,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "16521:56:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 3831,
                              "name": "_cashierSplitsInBasisPoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2988,
                              "src": "16580:27:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
                                "typeString": "mapping(contract Listing => uint64)"
                              }
                            },
                            "id": 3833,
                            "indexExpression": {
                              "id": 3832,
                              "name": "listing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3788,
                              "src": "16608:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_App_$2539",
                                "typeString": "contract App"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16580:36:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "16521:95:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 3835,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "16520:97:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 3836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16620:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "16520:105:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16494:131:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 3840,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "16654:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          },
                          "id": 3841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenToPurchaseIn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5257,
                          "src": "16654:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 3842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16654:27:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3845,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3788,
                                "src": "16703:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_App_$2539",
                                  "typeString": "contract App"
                                }
                              },
                              "id": 3846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "16703:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16703:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16695:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 3843,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "16695:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16695:24:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 3858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 3856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 3853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3849,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3790,
                                  "src": "16734:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 3850,
                                      "name": "listing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3788,
                                      "src": "16743:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_App_$2539",
                                        "typeString": "contract App"
                                      }
                                    },
                                    "id": 3851,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "price",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5252,
                                    "src": "16743:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                                      "typeString": "function () view external returns (uint64)"
                                    }
                                  },
                                  "id": 3852,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16743:15:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "16734:24:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "id": 3854,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "16733:26:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 3855,
                            "name": "paymentToCoop",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3806,
                            "src": "16762:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "16733:42:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 3857,
                          "name": "paymentToCashier",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3821,
                          "src": "16778:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "16733:61:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3839,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "16636:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 3859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16636:168:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3860,
                  "nodeType": "ExpressionStatement",
                  "src": "16636:168:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 3862,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "16837:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          },
                          "id": 3863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenToPurchaseIn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5257,
                          "src": "16837:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 3864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16837:27:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3867,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "16874:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 3868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16874:7:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16866:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 3865,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "16866:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16866:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3870,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3806,
                        "src": "16884:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3861,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "16832:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 3871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16832:66:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3872,
                  "nodeType": "ExpressionStatement",
                  "src": "16832:66:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 3874,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "16944:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          },
                          "id": 3875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenToPurchaseIn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5257,
                          "src": "16944:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 3876,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16944:27:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 3881,
                                "name": "cashier",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3785,
                                "src": "17001:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Cashier_$2793",
                                  "typeString": "contract Cashier"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Cashier_$2793",
                                  "typeString": "contract Cashier"
                                }
                              ],
                              "id": 3880,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16993:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3879,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16993:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3882,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16993:16:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16985:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 3877,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "16985:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3883,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16985:25:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 3884,
                        "name": "paymentToCashier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3821,
                        "src": "17024:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3873,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "16926:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 3885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16926:124:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3886,
                  "nodeType": "ExpressionStatement",
                  "src": "16926:124:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3888,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3788,
                        "src": "17140:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      {
                        "expression": {
                          "id": 3889,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17149:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "17149:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3891,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3806,
                        "src": "17161:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3887,
                      "name": "distributeStakingTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3604,
                      "src": "17116:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,address,uint64)"
                      }
                    },
                    "id": 3892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17116:59:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3893,
                  "nodeType": "ExpressionStatement",
                  "src": "17116:59:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3895,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3788,
                        "src": "17211:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      {
                        "id": 3896,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3806,
                        "src": "17220:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3894,
                      "name": "distributeGovernanceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3670,
                      "src": "17185:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,uint64)"
                      }
                    },
                    "id": 3897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17185:49:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3898,
                  "nodeType": "ExpressionStatement",
                  "src": "17185:49:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3902,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17292:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "17292:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3904,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3790,
                        "src": "17304:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 3899,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3788,
                        "src": "17279:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$2539",
                          "typeString": "contract App"
                        }
                      },
                      "id": 3901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5068,
                      "src": "17279:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 3905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17279:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3906,
                  "nodeType": "ExpressionStatement",
                  "src": "17279:32:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3908,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17361:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "17361:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3912,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "17393:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_App_$2539",
                              "typeString": "contract App"
                            }
                          ],
                          "id": 3911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17385:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3910,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "17385:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17385:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3916,
                            "name": "cashier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3785,
                            "src": "17423:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Cashier_$2793",
                              "typeString": "contract Cashier"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Cashier_$2793",
                              "typeString": "contract Cashier"
                            }
                          ],
                          "id": 3915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17415:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3914,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "17415:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17415:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 3922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3918,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3790,
                              "src": "17446:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 3919,
                                  "name": "listing",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3788,
                                  "src": "17455:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_App_$2539",
                                    "typeString": "contract App"
                                  }
                                },
                                "id": 3920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "price",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5252,
                                "src": "17455:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                                  "typeString": "function () view external returns (uint64)"
                                }
                              },
                              "id": 3921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17455:15:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "17446:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "id": 3923,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "17445:26:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3926,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3788,
                                "src": "17493:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_App_$2539",
                                  "typeString": "contract App"
                                }
                              },
                              "id": 3927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenToPurchaseIn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5257,
                              "src": "17493:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                                "typeString": "function () view external returns (contract ERC20)"
                              }
                            },
                            "id": 3928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17493:27:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 3925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17485:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3924,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "17485:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17485:36:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3907,
                      "name": "PurchasedWithCashier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2927,
                      "src": "17327:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address,uint256,address)"
                      }
                    },
                    "id": 3930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17327:204:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3931,
                  "nodeType": "EmitStatement",
                  "src": "17322:209:13"
                }
              ]
            },
            "functionSelector": "d75f72b0",
            "id": 3933,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3793,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3788,
                    "src": "16227:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  },
                  {
                    "id": 3794,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3790,
                    "src": "16236:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 3795,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3792,
                  "name": "requirePayment",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3464,
                  "src": "16212:14:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "16212:31:13"
              },
              {
                "arguments": [
                  {
                    "id": 3797,
                    "name": "cashier",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3785,
                    "src": "16266:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  }
                ],
                "id": 3798,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3796,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "16252:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "16252:22:13"
              },
              {
                "arguments": [
                  {
                    "id": 3800,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3788,
                    "src": "16297:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  }
                ],
                "id": 3801,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3799,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "16283:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "16283:22:13"
              },
              {
                "id": 3803,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3802,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "16314:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "16314:30:13"
              }
            ],
            "name": "purchase",
            "nameLocation": "16073:8:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3785,
                  "mutability": "mutable",
                  "name": "cashier",
                  "nameLocation": "16099:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3933,
                  "src": "16091:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Cashier_$2793",
                    "typeString": "contract Cashier"
                  },
                  "typeName": {
                    "id": 3784,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3783,
                      "name": "Cashier",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2793,
                      "src": "16091:7:13"
                    },
                    "referencedDeclaration": 2793,
                    "src": "16091:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3788,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "16120:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3933,
                  "src": "16116:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$2539",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "id": 3787,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3786,
                      "name": "App",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2539,
                      "src": "16116:3:13"
                    },
                    "referencedDeclaration": 2539,
                    "src": "16116:3:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2539",
                      "typeString": "contract App"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3790,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "16144:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3933,
                  "src": "16137:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3789,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16137:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16081:75:13"
            },
            "returnParameters": {
              "id": 3804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16349:0:13"
            },
            "scope": 4538,
            "src": "16064:1474:13",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3949,
              "nodeType": "Block",
              "src": "17661:52:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 3942,
                        "name": "_trials",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2997,
                        "src": "17678:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                          "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                        }
                      },
                      "id": 3944,
                      "indexExpression": {
                        "id": 3943,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3936,
                        "src": "17686:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17678:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                        "typeString": "mapping(address => struct TrialDeposit storage ref)"
                      }
                    },
                    "id": 3947,
                    "indexExpression": {
                      "expression": {
                        "id": 3945,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "17695:3:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3946,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "17695:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17678:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                      "typeString": "struct TrialDeposit storage ref"
                    }
                  },
                  "functionReturnParameters": 3941,
                  "id": 3948,
                  "nodeType": "Return",
                  "src": "17671:35:13"
                }
              ]
            },
            "functionSelector": "b8ba16fd",
            "id": 3950,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDepositAmount",
            "nameLocation": "17553:16:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3936,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "17582:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3950,
                  "src": "17570:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 3935,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3934,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "17570:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "17570:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17569:21:13"
            },
            "returnParameters": {
              "id": 3941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3940,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3950,
                  "src": "17636:19:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                    "typeString": "struct TrialDeposit"
                  },
                  "typeName": {
                    "id": 3939,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3938,
                      "name": "TrialDeposit",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2831,
                      "src": "17636:12:13"
                    },
                    "referencedDeclaration": 2831,
                    "src": "17636:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage_ptr",
                      "typeString": "struct TrialDeposit"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17635:21:13"
            },
            "scope": 4538,
            "src": "17544:169:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3967,
              "nodeType": "Block",
              "src": "17851:47:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 3961,
                        "name": "_trials",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2997,
                        "src": "17868:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                          "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                        }
                      },
                      "id": 3963,
                      "indexExpression": {
                        "id": 3962,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3955,
                        "src": "17876:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17868:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                        "typeString": "mapping(address => struct TrialDeposit storage ref)"
                      }
                    },
                    "id": 3965,
                    "indexExpression": {
                      "id": 3964,
                      "name": "buyer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3952,
                      "src": "17885:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17868:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                      "typeString": "struct TrialDeposit storage ref"
                    }
                  },
                  "functionReturnParameters": 3960,
                  "id": 3966,
                  "nodeType": "Return",
                  "src": "17861:30:13"
                }
              ]
            },
            "functionSelector": "f45b1b3a",
            "id": 3968,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDepositAmount",
            "nameLocation": "17728:16:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3952,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "17753:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3968,
                  "src": "17745:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3951,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17745:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3955,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "17772:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3968,
                  "src": "17760:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 3954,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3953,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "17760:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "17760:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17744:36:13"
            },
            "returnParameters": {
              "id": 3960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3959,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3968,
                  "src": "17826:19:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                    "typeString": "struct TrialDeposit"
                  },
                  "typeName": {
                    "id": 3958,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3957,
                      "name": "TrialDeposit",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2831,
                      "src": "17826:12:13"
                    },
                    "referencedDeclaration": 2831,
                    "src": "17826:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage_ptr",
                      "typeString": "struct TrialDeposit"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17825:21:13"
            },
            "scope": 4538,
            "src": "17719:179:13",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4095,
              "nodeType": "Block",
              "src": "18130:978:13",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 3990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 3982,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "18184:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 3984,
                          "indexExpression": {
                            "id": 3983,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "18192:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18184:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 3987,
                        "indexExpression": {
                          "expression": {
                            "id": 3985,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18201:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18201:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18184:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 3988,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "18184:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 3989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18223:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18184:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3995,
                  "nodeType": "IfStatement",
                  "src": "18180:105:13",
                  "trueBody": {
                    "id": 3994,
                    "nodeType": "Block",
                    "src": "18226:59:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3991,
                            "name": "ExistingTrialDepositFound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2847,
                            "src": "18247:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 3992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18247:27:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3993,
                        "nodeType": "RevertStatement",
                        "src": "18240:34:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3998
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3998,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "18339:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4095,
                      "src": "18333:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      },
                      "typeName": {
                        "id": 3997,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3996,
                          "name": "ERC20",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 690,
                          "src": "18333:5:13"
                        },
                        "referencedDeclaration": 690,
                        "src": "18333:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4002,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 3999,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3972,
                        "src": "18347:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "id": 4000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenToPurchaseIn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5257,
                      "src": "18347:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                        "typeString": "function () view external returns (contract ERC20)"
                      }
                    },
                    "id": 4001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18347:27:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18333:41:13"
                },
                {
                  "assignments": [
                    4004
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4004,
                      "mutability": "mutable",
                      "name": "purchaseTokenAmount",
                      "nameLocation": "18391:19:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4095,
                      "src": "18384:26:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4003,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "18384:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4010,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4005,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3974,
                      "src": "18413:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 4006,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3972,
                          "src": "18422:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AppBurnable_$2593",
                            "typeString": "contract AppBurnable"
                          }
                        },
                        "id": 4007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5252,
                        "src": "18422:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                          "typeString": "function () view external returns (uint64)"
                        }
                      },
                      "id": 4008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18422:15:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "18413:24:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18384:53:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4012,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3998,
                        "src": "18469:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "expression": {
                          "id": 4013,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18488:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18488:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 4019,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "18528:4:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Charter_$4538",
                                  "typeString": "contract Charter"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Charter_$4538",
                                  "typeString": "contract Charter"
                                }
                              ],
                              "id": 4018,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18520:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4017,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18520:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18520:13:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "18512:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4015,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "18512:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18512:22:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4022,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "18548:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4011,
                      "name": "_payFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3513,
                      "src": "18447:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address,address payable,uint64)"
                      }
                    },
                    "id": 4023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18447:130:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4024,
                  "nodeType": "ExpressionStatement",
                  "src": "18447:130:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4028,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18631:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4029,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18631:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4030,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3974,
                        "src": "18643:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 4025,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3972,
                        "src": "18618:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "id": 4027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5068,
                      "src": "18618:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 4031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18618:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4032,
                  "nodeType": "ExpressionStatement",
                  "src": "18618:32:13"
                },
                {
                  "expression": {
                    "id": 4041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4033,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "18687:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4037,
                          "indexExpression": {
                            "id": 4034,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "18695:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18687:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4038,
                        "indexExpression": {
                          "expression": {
                            "id": 4035,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18704:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18704:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18687:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4039,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2823,
                      "src": "18687:42:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4040,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3998,
                      "src": "18732:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "18687:50:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 4042,
                  "nodeType": "ExpressionStatement",
                  "src": "18687:50:13"
                },
                {
                  "expression": {
                    "id": 4051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4043,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "18747:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4047,
                          "indexExpression": {
                            "id": 4044,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "18755:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18747:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4048,
                        "indexExpression": {
                          "expression": {
                            "id": 4045,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18764:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18764:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18747:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4049,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseTokenAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2825,
                      "src": "18747:48:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4050,
                      "name": "purchaseTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4004,
                      "src": "18798:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "18747:70:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4052,
                  "nodeType": "ExpressionStatement",
                  "src": "18747:70:13"
                },
                {
                  "expression": {
                    "id": 4061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4053,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "18827:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4057,
                          "indexExpression": {
                            "id": 4054,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "18835:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18827:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4058,
                        "indexExpression": {
                          "expression": {
                            "id": 4055,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18844:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18844:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18827:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4059,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "18827:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4060,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3974,
                      "src": "18865:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "18827:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4062,
                  "nodeType": "ExpressionStatement",
                  "src": "18827:44:13"
                },
                {
                  "expression": {
                    "id": 4079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4063,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "18881:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4067,
                          "indexExpression": {
                            "id": 4064,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "18889:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18881:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4068,
                        "indexExpression": {
                          "expression": {
                            "id": 4065,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "18898:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "18898:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18881:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4069,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "cashier",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2830,
                      "src": "18881:36:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 4075,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18944:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 4074,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18936:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4073,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18936:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18936:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18928:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_payable_$",
                              "typeString": "type(address payable)"
                            },
                            "typeName": {
                              "id": 4071,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "18928:8:13",
                              "stateMutability": "payable",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18928:19:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4070,
                        "name": "Cashier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2793,
                        "src": "18920:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Cashier_$2793_$",
                          "typeString": "type(contract Cashier)"
                        }
                      },
                      "id": 4078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18920:28:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "src": "18881:67:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  },
                  "id": 4080,
                  "nodeType": "ExpressionStatement",
                  "src": "18881:67:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4082,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18990:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4083,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "18990:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4086,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3972,
                            "src": "19022:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          ],
                          "id": 4085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "19014:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4084,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19014:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4087,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19014:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4088,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "19044:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4091,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3998,
                            "src": "19085:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 4090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "19077:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4089,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19077:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4092,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19077:14:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4081,
                      "name": "TrialStarted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2938,
                      "src": "18964:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,uint256,address)"
                      }
                    },
                    "id": 4093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18964:137:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4094,
                  "nodeType": "EmitStatement",
                  "src": "18959:142:13"
                }
              ]
            },
            "documentation": {
              "id": 3969,
              "nodeType": "StructuredDocumentation",
              "src": "17904:60:13",
              "text": " @dev Transfers listing payment to escrow."
            },
            "functionSelector": "bc2402f1",
            "id": 4096,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3977,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3972,
                    "src": "18078:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 3978,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3976,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "18064:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "18064:22:13"
              },
              {
                "id": 3980,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 3979,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "18095:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "18095:30:13"
              }
            ],
            "name": "startTrial",
            "nameLocation": "17978:10:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3972,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "18001:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4096,
                  "src": "17989:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 3971,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3970,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "17989:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "17989:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3974,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "18017:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4096,
                  "src": "18010:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3973,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18010:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17988:36:13"
            },
            "returnParameters": {
              "id": 3981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18130:0:13"
            },
            "scope": 4538,
            "src": "17969:1139:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4225,
              "nodeType": "Block",
              "src": "19431:998:13",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4116,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "19485:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4118,
                          "indexExpression": {
                            "id": 4117,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "19493:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19485:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4121,
                        "indexExpression": {
                          "expression": {
                            "id": 4119,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "19502:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "19502:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19485:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "19485:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19524:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19485:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4129,
                  "nodeType": "IfStatement",
                  "src": "19481:105:13",
                  "trueBody": {
                    "id": 4128,
                    "nodeType": "Block",
                    "src": "19527:59:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4125,
                            "name": "ExistingTrialDepositFound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2847,
                            "src": "19548:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 4126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19548:27:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4127,
                        "nodeType": "RevertStatement",
                        "src": "19541:34:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4132
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4132,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "19640:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4225,
                      "src": "19634:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      },
                      "typeName": {
                        "id": 4131,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4130,
                          "name": "ERC20",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 690,
                          "src": "19634:5:13"
                        },
                        "referencedDeclaration": 690,
                        "src": "19634:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4136,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 4133,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "19648:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "id": 4134,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenToPurchaseIn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5257,
                      "src": "19648:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$690_$",
                        "typeString": "function () view external returns (contract ERC20)"
                      }
                    },
                    "id": 4135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19648:27:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19634:41:13"
                },
                {
                  "assignments": [
                    4138
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4138,
                      "mutability": "mutable",
                      "name": "purchaseTokenAmount",
                      "nameLocation": "19692:19:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4225,
                      "src": "19685:26:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4137,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "19685:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4144,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4139,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4105,
                      "src": "19714:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 4140,
                          "name": "listing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4103,
                          "src": "19723:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_AppBurnable_$2593",
                            "typeString": "contract AppBurnable"
                          }
                        },
                        "id": 4141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5252,
                        "src": "19723:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$",
                          "typeString": "function () view external returns (uint64)"
                        }
                      },
                      "id": 4142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19723:15:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19714:24:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19685:53:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4146,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4132,
                        "src": "19770:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "expression": {
                          "id": 4147,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "19789:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "19789:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 4153,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "19829:4:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Charter_$4538",
                                  "typeString": "contract Charter"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Charter_$4538",
                                  "typeString": "contract Charter"
                                }
                              ],
                              "id": 4152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19821:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4151,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "19821:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19821:13:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "19813:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4149,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19813:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4155,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19813:22:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4156,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4138,
                        "src": "19849:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4145,
                      "name": "_payFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3513,
                      "src": "19748:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address,address payable,uint64)"
                      }
                    },
                    "id": 4157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19748:130:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4158,
                  "nodeType": "ExpressionStatement",
                  "src": "19748:130:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4162,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "19932:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "19932:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4164,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4105,
                        "src": "19944:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 4159,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "19919:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "id": 4161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5068,
                      "src": "19919:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 4165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19919:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4166,
                  "nodeType": "ExpressionStatement",
                  "src": "19919:32:13"
                },
                {
                  "expression": {
                    "id": 4175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4167,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "19988:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4171,
                          "indexExpression": {
                            "id": 4168,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "19996:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19988:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4172,
                        "indexExpression": {
                          "expression": {
                            "id": 4169,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20005:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "20005:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19988:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4173,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2823,
                      "src": "19988:42:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4174,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4132,
                      "src": "20033:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$690",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "19988:50:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 4176,
                  "nodeType": "ExpressionStatement",
                  "src": "19988:50:13"
                },
                {
                  "expression": {
                    "id": 4185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4177,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "20048:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4181,
                          "indexExpression": {
                            "id": 4178,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "20056:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20048:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4182,
                        "indexExpression": {
                          "expression": {
                            "id": 4179,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20065:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "20065:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20048:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4183,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseTokenAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2825,
                      "src": "20048:48:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4184,
                      "name": "purchaseTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4138,
                      "src": "20099:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20048:70:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4186,
                  "nodeType": "ExpressionStatement",
                  "src": "20048:70:13"
                },
                {
                  "expression": {
                    "id": 4195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4187,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "20128:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4191,
                          "indexExpression": {
                            "id": 4188,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "20136:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20128:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4192,
                        "indexExpression": {
                          "expression": {
                            "id": 4189,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20145:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "20145:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20128:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4193,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "20128:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4194,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4105,
                      "src": "20166:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20128:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4196,
                  "nodeType": "ExpressionStatement",
                  "src": "20128:44:13"
                },
                {
                  "expression": {
                    "id": 4205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4197,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "20182:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4201,
                          "indexExpression": {
                            "id": 4198,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "20190:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20182:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4202,
                        "indexExpression": {
                          "expression": {
                            "id": 4199,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20199:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "20199:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20182:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4203,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "cashier",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2830,
                      "src": "20182:36:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4204,
                      "name": "cashier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4100,
                      "src": "20221:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "src": "20182:46:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  },
                  "id": 4206,
                  "nodeType": "ExpressionStatement",
                  "src": "20182:46:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4208,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20281:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20281:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4212,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4103,
                            "src": "20313:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          ],
                          "id": 4211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20305:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4210,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "20305:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20305:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4216,
                            "name": "cashier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4100,
                            "src": "20343:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Cashier_$2793",
                              "typeString": "contract Cashier"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Cashier_$2793",
                              "typeString": "contract Cashier"
                            }
                          ],
                          "id": 4215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20335:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4214,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "20335:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20335:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4218,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4138,
                        "src": "20365:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4221,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4132,
                            "src": "20406:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 4220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20398:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4219,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "20398:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20398:14:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4207,
                      "name": "TrialStartedWithCashier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2951,
                      "src": "20244:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address,uint256,address)"
                      }
                    },
                    "id": 4223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20244:178:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4224,
                  "nodeType": "EmitStatement",
                  "src": "20239:183:13"
                }
              ]
            },
            "documentation": {
              "id": 4097,
              "nodeType": "StructuredDocumentation",
              "src": "19114:73:13",
              "text": " @dev Transfers listing payment to escrow with cashier."
            },
            "functionSelector": "2c636269",
            "id": 4226,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 4108,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4103,
                    "src": "19348:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 4109,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4107,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "19334:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "19334:22:13"
              },
              {
                "arguments": [
                  {
                    "id": 4111,
                    "name": "cashier",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4100,
                    "src": "19379:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  }
                ],
                "id": 4112,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4110,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "19365:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "19365:22:13"
              },
              {
                "id": 4114,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4113,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "19396:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "19396:30:13"
              }
            ],
            "name": "startTrial",
            "nameLocation": "19201:10:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4100,
                  "mutability": "mutable",
                  "name": "cashier",
                  "nameLocation": "19229:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "19221:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Cashier_$2793",
                    "typeString": "contract Cashier"
                  },
                  "typeName": {
                    "id": 4099,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4098,
                      "name": "Cashier",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2793,
                      "src": "19221:7:13"
                    },
                    "referencedDeclaration": 2793,
                    "src": "19221:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4103,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "19258:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "19246:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 4102,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4101,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "19246:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "19246:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4105,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "19282:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "19275:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4104,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19275:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19211:83:13"
            },
            "returnParameters": {
              "id": 4115,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19431:0:13"
            },
            "scope": 4538,
            "src": "19192:1237:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4249,
              "nodeType": "Block",
              "src": "20485:148:13",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 4231,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20499:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20499:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4233,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32,
                          "src": "20513:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 4234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20513:7:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "20499:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 4236,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "20524:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "20524:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 4238,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4229,
                            "src": "20538:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Listing_$5373",
                              "typeString": "contract Listing"
                            }
                          },
                          "id": 4239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32,
                          "src": "20538:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 4240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20538:15:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "20524:29:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20499:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4247,
                  "nodeType": "IfStatement",
                  "src": "20495:121:13",
                  "trueBody": {
                    "id": 4246,
                    "nodeType": "Block",
                    "src": "20555:61:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4243,
                            "name": "MustBeCharterOrListingOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2850,
                            "src": "20576:27:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 4244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20576:29:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4245,
                        "nodeType": "RevertStatement",
                        "src": "20569:36:13"
                      }
                    ]
                  }
                },
                {
                  "id": 4248,
                  "nodeType": "PlaceholderStatement",
                  "src": "20625:1:13"
                }
              ]
            },
            "id": 4250,
            "name": "onlyOwnerOrListingOwner",
            "nameLocation": "20444:23:13",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4229,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "20476:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "20468:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Listing_$5373",
                    "typeString": "contract Listing"
                  },
                  "typeName": {
                    "id": 4228,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4227,
                      "name": "Listing",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5373,
                      "src": "20468:7:13"
                    },
                    "referencedDeclaration": 5373,
                    "src": "20468:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Listing_$5373",
                      "typeString": "contract Listing"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20467:17:13"
            },
            "src": "20435:198:13",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4339,
              "nodeType": "Block",
              "src": "20915:737:13",
              "statements": [
                {
                  "assignments": [
                    4269
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4269,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nameLocation": "20973:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "20953:27:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                        "typeString": "struct TrialDeposit"
                      },
                      "typeName": {
                        "id": 4268,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4267,
                          "name": "TrialDeposit",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2831,
                          "src": "20953:12:13"
                        },
                        "referencedDeclaration": 2831,
                        "src": "20953:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage_ptr",
                          "typeString": "struct TrialDeposit"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4275,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 4270,
                        "name": "_trials",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2997,
                        "src": "20983:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                          "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                        }
                      },
                      "id": 4272,
                      "indexExpression": {
                        "id": 4271,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "20991:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20983:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                        "typeString": "mapping(address => struct TrialDeposit storage ref)"
                      }
                    },
                    "id": 4274,
                    "indexExpression": {
                      "id": 4273,
                      "name": "buyer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4256,
                      "src": "21000:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20983:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                      "typeString": "struct TrialDeposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20953:53:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4276,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4269,
                        "src": "21020:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                          "typeString": "struct TrialDeposit memory"
                        }
                      },
                      "id": 4277,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "21020:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4278,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21038:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21020:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4284,
                  "nodeType": "IfStatement",
                  "src": "21016:79:13",
                  "trueBody": {
                    "id": 4283,
                    "nodeType": "Block",
                    "src": "21041:54:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4280,
                            "name": "TrialDepositNotFound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2844,
                            "src": "21062:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 4281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21062:22:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4282,
                        "nodeType": "RevertStatement",
                        "src": "21055:29:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 4292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4285,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "21104:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4288,
                          "indexExpression": {
                            "id": 4286,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4254,
                            "src": "21112:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21104:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4289,
                        "indexExpression": {
                          "id": 4287,
                          "name": "buyer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4256,
                          "src": "21121:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21104:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4290,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "21104:30:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 4291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21137:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21104:34:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4293,
                  "nodeType": "ExpressionStatement",
                  "src": "21104:34:13"
                },
                {
                  "expression": {
                    "id": 4301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4294,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "21148:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4297,
                          "indexExpression": {
                            "id": 4295,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4254,
                            "src": "21156:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21148:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4298,
                        "indexExpression": {
                          "id": 4296,
                          "name": "buyer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4256,
                          "src": "21165:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21148:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseTokenAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2825,
                      "src": "21148:43:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 4300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21194:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21148:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4302,
                  "nodeType": "ExpressionStatement",
                  "src": "21148:47:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4306,
                        "name": "buyer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4256,
                        "src": "21261:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4307,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4269,
                          "src": "21268:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4308,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2827,
                        "src": "21268:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 4303,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "21244:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "id": 4305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2592,
                      "src": "21244:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64) external"
                      }
                    },
                    "id": 4309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21244:39:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4310,
                  "nodeType": "ExpressionStatement",
                  "src": "21244:39:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4312,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4269,
                          "src": "21348:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4313,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "purchaseToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2823,
                        "src": "21348:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4316,
                            "name": "buyer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4256,
                            "src": "21391:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21383:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4314,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21383:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21383:14:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "expression": {
                          "id": 4318,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4269,
                          "src": "21411:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4319,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "purchaseTokenAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2825,
                        "src": "21411:27:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4311,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "21330:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 4320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21330:118:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4321,
                  "nodeType": "ExpressionStatement",
                  "src": "21330:118:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4323,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21491:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "21491:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4325,
                        "name": "buyer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4256,
                        "src": "21515:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4328,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4254,
                            "src": "21542:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          ],
                          "id": 4327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21534:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4326,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21534:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21534:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 4330,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4269,
                          "src": "21564:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4331,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "purchaseTokenAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2825,
                        "src": "21564:27:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 4334,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4269,
                              "src": "21613:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                                "typeString": "struct TrialDeposit memory"
                              }
                            },
                            "id": 4335,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "purchaseToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2823,
                            "src": "21613:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 4333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21605:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4332,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "21605:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21605:30:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4322,
                      "name": "TrialCanceled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2964,
                      "src": "21464:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address,uint256,address)"
                      }
                    },
                    "id": 4337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21464:181:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4338,
                  "nodeType": "EmitStatement",
                  "src": "21459:186:13"
                }
              ]
            },
            "documentation": {
              "id": 4251,
              "nodeType": "StructuredDocumentation",
              "src": "20639:68:13",
              "text": " @dev Send escrowed payment back to the purchaser."
            },
            "functionSelector": "5f34c6ff",
            "id": 4340,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 4259,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4254,
                    "src": "20822:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 4260,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4258,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "20808:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "20808:22:13"
              },
              {
                "arguments": [
                  {
                    "id": 4262,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4254,
                    "src": "20863:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 4263,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4261,
                  "name": "onlyOwnerOrListingOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4250,
                  "src": "20839:23:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "20839:32:13"
              },
              {
                "id": 4265,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4264,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "20880:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "20880:30:13"
              }
            ],
            "name": "cancelTrial",
            "nameLocation": "20721:11:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4254,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "20745:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4340,
                  "src": "20733:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 4253,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4252,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "20733:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "20733:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "20762:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4340,
                  "src": "20754:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20754:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20732:36:13"
            },
            "returnParameters": {
              "id": 4266,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20915:0:13"
            },
            "scope": 4538,
            "src": "20712:940:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4516,
              "nodeType": "Block",
              "src": "21932:1682:13",
              "statements": [
                {
                  "assignments": [
                    4359
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4359,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nameLocation": "21990:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "21970:27:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                        "typeString": "struct TrialDeposit"
                      },
                      "typeName": {
                        "id": 4358,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 4357,
                          "name": "TrialDeposit",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2831,
                          "src": "21970:12:13"
                        },
                        "referencedDeclaration": 2831,
                        "src": "21970:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage_ptr",
                          "typeString": "struct TrialDeposit"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4365,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 4360,
                        "name": "_trials",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2997,
                        "src": "22000:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                          "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                        }
                      },
                      "id": 4362,
                      "indexExpression": {
                        "id": 4361,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4344,
                        "src": "22008:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "22000:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                        "typeString": "mapping(address => struct TrialDeposit storage ref)"
                      }
                    },
                    "id": 4364,
                    "indexExpression": {
                      "id": 4363,
                      "name": "buyer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4346,
                      "src": "22017:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22000:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                      "typeString": "struct TrialDeposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21970:53:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4366,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "22037:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                          "typeString": "struct TrialDeposit memory"
                        }
                      },
                      "id": 4367,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "22037:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22055:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22037:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4374,
                  "nodeType": "IfStatement",
                  "src": "22033:79:13",
                  "trueBody": {
                    "id": 4373,
                    "nodeType": "Block",
                    "src": "22058:54:13",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4370,
                            "name": "TrialDepositNotFound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2844,
                            "src": "22079:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 4371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22079:22:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4372,
                        "nodeType": "RevertStatement",
                        "src": "22072:29:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4376
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4376,
                      "mutability": "mutable",
                      "name": "purchaseTokenAmount",
                      "nameLocation": "22128:19:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "22121:26:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4375,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "22121:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4379,
                  "initialValue": {
                    "expression": {
                      "id": 4377,
                      "name": "deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4359,
                      "src": "22150:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                        "typeString": "struct TrialDeposit memory"
                      }
                    },
                    "id": 4378,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "purchaseTokenAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2825,
                    "src": "22150:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22121:56:13"
                },
                {
                  "expression": {
                    "id": 4387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4380,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "22187:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4383,
                          "indexExpression": {
                            "id": 4381,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4344,
                            "src": "22195:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "22187:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4384,
                        "indexExpression": {
                          "id": 4382,
                          "name": "buyer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4346,
                          "src": "22204:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22187:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2827,
                      "src": "22187:30:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 4386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22220:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22187:34:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4388,
                  "nodeType": "ExpressionStatement",
                  "src": "22187:34:13"
                },
                {
                  "expression": {
                    "id": 4396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 4389,
                            "name": "_trials",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2997,
                            "src": "22231:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_AppBurnable_$2593_$_t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$_$",
                              "typeString": "mapping(contract AppBurnable => mapping(address => struct TrialDeposit storage ref))"
                            }
                          },
                          "id": 4392,
                          "indexExpression": {
                            "id": 4390,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4344,
                            "src": "22239:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "22231:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TrialDeposit_$2831_storage_$",
                            "typeString": "mapping(address => struct TrialDeposit storage ref)"
                          }
                        },
                        "id": 4393,
                        "indexExpression": {
                          "id": 4391,
                          "name": "buyer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4346,
                          "src": "22248:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22231:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_storage",
                          "typeString": "struct TrialDeposit storage ref"
                        }
                      },
                      "id": 4394,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "purchaseTokenAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2825,
                      "src": "22231:43:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 4395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22277:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22231:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4397,
                  "nodeType": "ExpressionStatement",
                  "src": "22231:47:13"
                },
                {
                  "assignments": [
                    4399
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4399,
                      "mutability": "mutable",
                      "name": "paymentToCoop",
                      "nameLocation": "22336:13:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "22329:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4398,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "22329:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4407,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4400,
                            "name": "purchaseTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4376,
                            "src": "22353:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 4401,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2864,
                              "src": "22387:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CharterConfig_$2820_storage",
                                "typeString": "struct CharterConfig storage ref"
                              }
                            },
                            "id": 4402,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contributionBasisPoints",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2809,
                            "src": "22387:30:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "22353:64:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 4404,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "22352:66:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3130303030",
                      "id": 4405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22421:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "22352:74:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22329:97:13"
                },
                {
                  "assignments": [
                    4409
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4409,
                      "mutability": "mutable",
                      "name": "paymentToCashier",
                      "nameLocation": "22443:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "22436:23:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4408,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "22436:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4411,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 4410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22462:1:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22436:27:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_contract$_Cashier_$2793",
                      "typeString": "contract Cashier"
                    },
                    "id": 4423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4412,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "22477:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                          "typeString": "struct TrialDeposit memory"
                        }
                      },
                      "id": 4413,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cashier",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2830,
                      "src": "22477:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 4419,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "22520:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 4418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "22512:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4417,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22512:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4420,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22512:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22504:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_payable_$",
                              "typeString": "type(address payable)"
                            },
                            "typeName": {
                              "id": 4415,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22504:8:13",
                              "stateMutability": "payable",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22504:19:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4414,
                        "name": "Cashier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2793,
                        "src": "22496:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Cashier_$2793_$",
                          "typeString": "type(contract Cashier)"
                        }
                      },
                      "id": 4422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22496:28:13",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Cashier_$2793",
                        "typeString": "contract Cashier"
                      }
                    },
                    "src": "22477:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4439,
                  "nodeType": "IfStatement",
                  "src": "22473:235:13",
                  "trueBody": {
                    "id": 4438,
                    "nodeType": "Block",
                    "src": "22526:182:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 4436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4424,
                            "name": "paymentToCashier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4409,
                            "src": "22540:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 4435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  },
                                  "id": 4432,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        },
                                        "id": 4427,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4425,
                                          "name": "purchaseTokenAmount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4376,
                                          "src": "22577:19:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 4426,
                                          "name": "paymentToCoop",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4399,
                                          "src": "22599:13:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "src": "22577:35:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      }
                                    ],
                                    "id": 4428,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "22576:37:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "baseExpression": {
                                      "id": 4429,
                                      "name": "_cashierSplitsInBasisPoints",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2988,
                                      "src": "22636:27:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_contract$_Listing_$5373_$_t_uint64_$",
                                        "typeString": "mapping(contract Listing => uint64)"
                                      }
                                    },
                                    "id": 4431,
                                    "indexExpression": {
                                      "id": 4430,
                                      "name": "listing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4344,
                                      "src": "22664:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_AppBurnable_$2593",
                                        "typeString": "contract AppBurnable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "22636:36:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "src": "22576:96:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                }
                              ],
                              "id": 4433,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "22575:98:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "3130303030",
                              "id": 4434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22692:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10000_by_1",
                                "typeString": "int_const 10000"
                              },
                              "value": "10000"
                            },
                            "src": "22575:122:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "22540:157:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 4437,
                        "nodeType": "ExpressionStatement",
                        "src": "22540:157:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4441
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4441,
                      "mutability": "mutable",
                      "name": "paymentToListing",
                      "nameLocation": "22724:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "22717:23:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4440,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "22717:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4447,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 4444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4442,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4376,
                        "src": "22743:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 4443,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4399,
                        "src": "22777:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "22743:47:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 4445,
                      "name": "paymentToCashier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4409,
                      "src": "22805:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "22743:78:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22717:104:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4449,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4359,
                          "src": "22865:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4450,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "purchaseToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2823,
                        "src": "22865:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 4453,
                                "name": "listing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4344,
                                "src": "22896:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_AppBurnable_$2593",
                                  "typeString": "contract AppBurnable"
                                }
                              },
                              "id": 4454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "22896:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 4455,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22896:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "22888:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4451,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "22888:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22888:24:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4457,
                        "name": "paymentToListing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4441,
                        "src": "22914:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4448,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "22860:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 4458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22860:71:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4459,
                  "nodeType": "ExpressionStatement",
                  "src": "22860:71:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4460,
                      "name": "paymentToCashier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4409,
                      "src": "22964:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22983:1:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22964:20:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4477,
                  "nodeType": "IfStatement",
                  "src": "22960:192:13",
                  "trueBody": {
                    "id": 4476,
                    "nodeType": "Block",
                    "src": "22986:166:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4464,
                                "name": "deposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4359,
                                "src": "23022:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                                  "typeString": "struct TrialDeposit memory"
                                }
                              },
                              "id": 4465,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "purchaseToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2823,
                              "src": "23022:21:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$690",
                                "typeString": "contract ERC20"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "expression": {
                                        "id": 4468,
                                        "name": "deposit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4359,
                                        "src": "23069:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                                          "typeString": "struct TrialDeposit memory"
                                        }
                                      },
                                      "id": 4469,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "cashier",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2830,
                                      "src": "23069:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Cashier_$2793",
                                        "typeString": "contract Cashier"
                                      }
                                    },
                                    "id": 4470,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "owner",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 32,
                                    "src": "23069:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                      "typeString": "function () view external returns (address)"
                                    }
                                  },
                                  "id": 4471,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23069:23:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4467,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "23061:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 4466,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "23061:8:13",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4472,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23061:32:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 4473,
                              "name": "paymentToCashier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4409,
                              "src": "23111:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$690",
                                "typeString": "contract ERC20"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 4463,
                            "name": "_pay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3487,
                            "src": "23000:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                              "typeString": "function (contract ERC20,address payable,uint64)"
                            }
                          },
                          "id": 4474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23000:141:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4475,
                        "nodeType": "ExpressionStatement",
                        "src": "23000:141:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4479,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4359,
                          "src": "23184:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                            "typeString": "struct TrialDeposit memory"
                          }
                        },
                        "id": 4480,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "purchaseToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2823,
                        "src": "23184:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4483,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "23215:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 4484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23215:7:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4482,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "23207:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4481,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "23207:8:13",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23207:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4486,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4399,
                        "src": "23225:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$690",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4478,
                      "name": "_pay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3487,
                      "src": "23179:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$690_$_t_address_payable_$_t_uint64_$returns$__$",
                        "typeString": "function (contract ERC20,address payable,uint64)"
                      }
                    },
                    "id": 4487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23179:60:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4488,
                  "nodeType": "ExpressionStatement",
                  "src": "23179:60:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4490,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4344,
                        "src": "23329:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      {
                        "id": 4491,
                        "name": "buyer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4346,
                        "src": "23338:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4492,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4399,
                        "src": "23345:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4489,
                      "name": "distributeStakingTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3604,
                      "src": "23305:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,address,uint64)"
                      }
                    },
                    "id": 4493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23305:54:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4494,
                  "nodeType": "ExpressionStatement",
                  "src": "23305:54:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4496,
                        "name": "listing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4344,
                        "src": "23395:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        }
                      },
                      {
                        "id": 4497,
                        "name": "paymentToCoop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4399,
                        "src": "23404:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_AppBurnable_$2593",
                          "typeString": "contract AppBurnable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4495,
                      "name": "distributeGovernanceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3670,
                      "src": "23369:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Listing_$5373_$_t_uint64_$returns$__$",
                        "typeString": "function (contract Listing,uint64)"
                      }
                    },
                    "id": 4498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23369:49:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4499,
                  "nodeType": "ExpressionStatement",
                  "src": "23369:49:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4501,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "23461:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "23461:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4503,
                        "name": "buyer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4346,
                        "src": "23485:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 4506,
                            "name": "listing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4344,
                            "src": "23512:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AppBurnable_$2593",
                              "typeString": "contract AppBurnable"
                            }
                          ],
                          "id": 4505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "23504:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4504,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "23504:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23504:16:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4508,
                        "name": "purchaseTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4376,
                        "src": "23534:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 4511,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4359,
                              "src": "23575:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TrialDeposit_$2831_memory_ptr",
                                "typeString": "struct TrialDeposit memory"
                              }
                            },
                            "id": 4512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "purchaseToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2823,
                            "src": "23575:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$690",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 4510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "23567:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4509,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "23567:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23567:30:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4500,
                      "name": "TrialFinished",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2977,
                      "src": "23434:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address,uint256,address)"
                      }
                    },
                    "id": 4514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23434:173:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4515,
                  "nodeType": "EmitStatement",
                  "src": "23429:178:13"
                }
              ]
            },
            "documentation": {
              "id": 4341,
              "nodeType": "StructuredDocumentation",
              "src": "21658:66:13",
              "text": " @dev Finalize transaction and distribute tokens"
            },
            "functionSelector": "a2ec82f4",
            "id": 4517,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 4349,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4344,
                    "src": "21839:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 4350,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4348,
                  "name": "requireMember",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4837,
                  "src": "21825:13:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "21825:22:13"
              },
              {
                "arguments": [
                  {
                    "id": 4352,
                    "name": "listing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4344,
                    "src": "21880:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  }
                ],
                "id": 4353,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4351,
                  "name": "onlyOwnerOrListingOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4250,
                  "src": "21856:23:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "21856:32:13"
              },
              {
                "id": 4355,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4354,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "21897:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "21897:30:13"
              }
            ],
            "name": "finishTrial",
            "nameLocation": "21738:11:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4344,
                  "mutability": "mutable",
                  "name": "listing",
                  "nameLocation": "21762:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "21750:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AppBurnable_$2593",
                    "typeString": "contract AppBurnable"
                  },
                  "typeName": {
                    "id": 4343,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4342,
                      "name": "AppBurnable",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2593,
                      "src": "21750:11:13"
                    },
                    "referencedDeclaration": 2593,
                    "src": "21750:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AppBurnable_$2593",
                      "typeString": "contract AppBurnable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4346,
                  "mutability": "mutable",
                  "name": "buyer",
                  "nameLocation": "21779:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "21771:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21771:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21749:36:13"
            },
            "returnParameters": {
              "id": 4356,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21932:0:13"
            },
            "scope": 4538,
            "src": "21729:1885:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4536,
              "nodeType": "Block",
              "src": "23790:49:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4532,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4520,
                        "src": "23819:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4533,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4522,
                        "src": "23825:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "id": 4529,
                        "name": "stakingToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2857,
                        "src": "23800:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CharterStakingToken_$4752",
                          "typeString": "contract CharterStakingToken"
                        }
                      },
                      "id": 4531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4706,
                      "src": "23800:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64) external"
                      }
                    },
                    "id": 4534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23800:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4535,
                  "nodeType": "ExpressionStatement",
                  "src": "23800:32:13"
                }
              ]
            },
            "documentation": {
              "id": 4518,
              "nodeType": "StructuredDocumentation",
              "src": "23620:45:13",
              "text": "@dev slashes tokens from a staked address"
            },
            "functionSelector": "83f684a4",
            "id": 4537,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4525,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4524,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46,
                  "src": "23737:9:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "23737:9:13"
              },
              {
                "id": 4527,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4526,
                  "name": "onlyWithOwnedStakeAndGovTokens",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3087,
                  "src": "23755:30:13"
                },
                "nodeType": "ModifierInvocation",
                "src": "23755:30:13"
              }
            ],
            "name": "slash",
            "nameLocation": "23679:5:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4520,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "23693:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4537,
                  "src": "23685:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4519,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23685:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4522,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "23706:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 4537,
                  "src": "23699:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4521,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "23699:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23684:29:13"
            },
            "returnParameters": {
              "id": 4528,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23790:0:13"
            },
            "scope": 4538,
            "src": "23670:169:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4539,
        "src": "1824:22017:13",
        "usedErrors": [
          2841,
          2844,
          2847,
          2850,
          2853
        ]
      }
    ],
    "src": "32:23810:13"
  }
}