{
  "contractName": "RTokenStorageLayoutTester",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "strategy",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "conversionRate",
          "type": "uint256"
        }
      ],
      "name": "AllocationStrategyChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "CodeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldHatID",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newHatID",
          "type": "uint256"
        }
      ],
      "name": "HatChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "HatCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "InterestPaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isDistribution",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemableAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "internalSavingsAmount",
          "type": "uint256"
        }
      ],
      "name": "LoansTransferred",
      "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": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_NUM_HAT_RECIPIENTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_UINT256",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PROPORTION_BASE",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SELF_HAT_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_guardCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "cumulativeInterest",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rInterest",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sInternalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy_",
          "type": "address"
        }
      ],
      "name": "changeAllocationStrategy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHatFor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        },
        {
          "internalType": "bool",
          "name": "doChangeHat",
          "type": "bool"
        }
      ],
      "name": "createHat",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getAccountStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "hatID",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "sInternalAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterestPayable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cumulativeInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lRecipientsSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.AccountStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentAllocationStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentSavingStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getGlobalStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "totalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavingsAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.GlobalStats",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getHatByAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatByID",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "useCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalLoans",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavings",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.HatStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getMaximumHatID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSavingAssetBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sOriginalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "hatStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "useCount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalLoans",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalInternalSavings",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ias",
      "outputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "allocationStrategy",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "decimals_",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "interestPayableOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "name": "mintWithNewHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "mintWithSelectedHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "payInterest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedLoanOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedSavingsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "redeemAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeemAndTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        }
      ],
      "name": "redeemAndTransferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetOrignalAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAllFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transferAllowances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "updateCode",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "validate",
      "outputs": [],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"conversionRate\",\"type\":\"uint256\"}],\"name\":\"AllocationStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"CodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldHatID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newHatID\",\"type\":\"uint256\"}],\"name\":\"HatChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"HatCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InterestPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isDistribution\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemableAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"internalSavingsAmount\",\"type\":\"uint256\"}],\"name\":\"LoansTransferred\",\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INITIAL_SAVING_ASSET_CONVERSION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_NUM_HAT_RECIPIENTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_UINT256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PROPORTION_BASE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SELF_HAT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_guardCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accountStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy_\",\"type\":\"address\"}],\"name\":\"changeAllocationStrategy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHatFor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"},{\"internalType\":\"bool\",\"name\":\"doChangeHat\",\"type\":\"bool\"}],\"name\":\"createHat\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getAccountStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterestPayable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lRecipientsSum\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.AccountStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentAllocationStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentSavingStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGlobalStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavingsAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.GlobalStats\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getHatByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatByID\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavings\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.HatStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMaximumHatID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSavingAssetBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sOriginalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hatStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalInternalSavings\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ias\",\"outputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"allocationStrategy\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"interestPayableOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"name\":\"mintWithNewHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"mintWithSelectedHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"payInterest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedLoanOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedSavingsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemAndTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"}],\"name\":\"redeemAndTransferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetOrignalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAllFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"transferAllowances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"updateCode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"validate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Test RTokenStorage Layout\",\"methods\":{\"changeAllocationStrategy(address)\":{\"details\":\"IRToken.changeAllocationStrategy implementation\"},\"changeHat(uint256)\":{\"details\":\"IRToken.changeHat implementation\"},\"changeHatFor(address,uint256)\":{\"details\":\"IRToken.changeHatFor implementation\"},\"createHat(address[],uint32[],bool)\":{\"details\":\"IRToken.createHat implementation\"},\"getAccountStats(address)\":{\"details\":\"IRToken.getAccountStats implementation\"},\"getCurrentAllocationStrategy()\":{\"details\":\"IRToken.changeHatFor implementation\"},\"getCurrentSavingStrategy()\":{\"details\":\"IRToken.getCurrentSavingStrategy implementation\"},\"getGlobalStats()\":{\"details\":\"IRToken.getAccountStats implementation!1\"},\"getHatByAddress(address)\":{\"details\":\"IRToken.getHatByAddress implementation\"},\"getHatByID(uint256)\":{\"details\":\"IRToken.getHatByID implementation\"},\"getHatStats(uint256)\":{\"details\":\"IRToken.getHatStats implementation\"},\"getMaximumHatID()\":{\"details\":\"IRToken.getMaximumHatID implementation\"},\"getSavingAssetBalance()\":{\"details\":\"IRToken.getSavingAssetBalance implementation\"},\"interestPayableOf(address)\":{\"details\":\"IRToken.interestPayableOf implementation\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"mint(uint256)\":{\"details\":\"IRToken.mint implementation\"},\"mintWithNewHat(uint256,address[],uint32[])\":{\"details\":\"IRToken.mintWithNewHat implementation\"},\"mintWithSelectedHat(uint256,uint256)\":{\"details\":\"IRToken.mintWithSelectedHat implementation\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"payInterest(address)\":{\"details\":\"IRToken.payInterest implementation\"},\"receivedLoanOf(address)\":{\"details\":\"IRToken.receivedLoanOf implementation\"},\"receivedSavingsOf(address)\":{\"details\":\"IRToken.receivedSavingsOf implementation\"},\"redeem(uint256)\":{\"details\":\"IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets\"},\"redeemAll()\":{\"details\":\"IRToken.redeemAll implementation\"},\"redeemAndTransfer(address,uint256)\":{\"details\":\"IRToken.redeemAndTransfer implementation\"},\"redeemAndTransferAll(address)\":{\"details\":\"IRToken.redeemAndTransferAll implementation\"},\"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.\"},\"transferAll(address)\":{\"details\":\"IRToken.transferAll implementation\"},\"transferAllFrom(address,address)\":{\"details\":\"IRToken.transferAllFrom implementation\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateCode(address)\":{\"details\":\"Update the rToken logic contract code\"}}},\"userdoc\":{\"methods\":{\"allowance(address,address)\":{\"notice\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called.\"},\"approve(address,uint256)\":{\"notice\":\"Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event.\"},\"balanceOf(address)\":{\"notice\":\"Returns the amount of tokens owned by `account`.\"},\"initialize(address,string,string,uint256)\":{\"notice\":\"Create rToken linked with cToken at `cToken_`\"},\"transfer(address,uint256)\":{\"notice\":\"Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/test/StorageLayout.sol\":\"RTokenStorageLayoutTester\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IAllocationStrategy.sol\":{\"keccak256\":\"0xe6771d9a3f2c4719d6b2c60cd8abf03686d8cdddf5d359ccf7ab58d17d9e1380\",\"urls\":[\"bzz-raw://80f212859923c044b4ef360dc19776149f2aacbb27c994f6b76b9cc8260a41f7\",\"dweb:/ipfs/QmWPsojno4n63Drh9WvBtCM89aovwDuabHppDh1LVgmgkY\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRToken.sol\":{\"keccak256\":\"0xa7e01f9f70c505d624fe31e53b6b766d0d476c2851fadc1c3e3e19b779b4d2fc\",\"urls\":[\"bzz-raw://417316c44a1591fd07c2254097f98fd4ac0bc352e7035cf57f9df9c22ebde63c\",\"dweb:/ipfs/QmVoRFAMjS7GSjtLCoZJsqXCKygqVW7oas9X1G1WrMNZmE\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRTokenAdmin.sol\":{\"keccak256\":\"0x25dba438823ddf59003f7963b49cb3e7c1105e62c19126ccc99aeb39b02c59f9\",\"urls\":[\"bzz-raw://53c52647440910aa820fe4d0ad6a358faf4a6f80562fa0d6cb87b5a22c6fbed8\",\"dweb:/ipfs/QmVFpJKMQpFymdK22v4b4NQcs5yWEN3urTtnRkHFoideNx\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/LibraryLock.sol\":{\"keccak256\":\"0x9195f8c96fd7bb4cdd7696f14c15ff7cece01eca84a38de25693bf45318b018f\",\"urls\":[\"bzz-raw://0bd72dac7bb67467446ddea9fa47c79f9b48ce2c528cbab8fd05bdc19537cbd2\",\"dweb:/ipfs/QmSHK5T1927rf6T7xjRaQMuo1gpPaLVHb947pvPTHwXcwj\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Ownable.sol\":{\"keccak256\":\"0xd2568237b51a02b9d1a1b143b938f664988828145f11d0d0acc44a832803f882\",\"urls\":[\"bzz-raw://4371b65f807c88fb73f3a691ade6ccdc556a28e0f63a8133f011c1f7054c7ffc\",\"dweb:/ipfs/QmVCZSEccoWe9BNFknDXjJviZbGrCUbs32bcwea9jtzpWA\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Proxiable.sol\":{\"keccak256\":\"0xd14d0d1ae8b8ed59af55ac901ec2a60d1087ab7e86fbd389758baf6afb35721f\",\"urls\":[\"bzz-raw://bf892b136580d5241a54c68a942b2e23f0f321700fa1aacd16e0fdb5f01a1ced\",\"dweb:/ipfs/QmRUXF7yXBJVRwqv11dDxWqt8DEJXn3YMWRUZv8escF5ya\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol\":{\"keccak256\":\"0x50016dfcaf825f6a63785635129399429615a3dbda6d668f17fa7034e6bde634\",\"urls\":[\"bzz-raw://b31879e7e8e36197e54c6e8b85b91ac0c61acf5eae05c27a3f995b6c0dd18b82\",\"dweb:/ipfs/QmPJU3oAe6FzjmWZWDa5oiPGTCq9yi681jwxvJkHWjf56i\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStorage.sol\":{\"keccak256\":\"0x2879364f6e821d6d136ec4dc1d70a9ab47f5cecfff5c117d86cce5b5f9e4d79c\",\"urls\":[\"bzz-raw://30a1e2a903b3efdf921270a53f6da3dcbed9a72dd7a63fafc66520c612b52450\",\"dweb:/ipfs/QmPnV6yWW1nCbdXH1nU22wRPRxzUDDr1S6mFhWaoz5fvCR\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStructs.sol\":{\"keccak256\":\"0x5c7c3b26d2f6f8fd489b2a326d4658f67e1f4e3cbe03c3a6831dd5103ead41e0\",\"urls\":[\"bzz-raw://991d8988992e169e0faa0d57f16684cc190b33a5b4e028993c9f74f158a8a16d\",\"dweb:/ipfs/QmVYKkdVLb2yuhDx7fMTY8UNFrskX2w3eSyLMnvoBVD3yU\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x447761b97eb2e13c2a44d868b1e4afd8127c6bfdea4bfbf642cfadd0b106b93b\",\"urls\":[\"bzz-raw://28a8e50952dad7e86a30ec746434adb8b7ed70249488508ead4f271a6f61e74e\",\"dweb:/ipfs/QmNmJkH3DKcQsD9ZRUWzeojLNvgjn8TNVtHkbDRy35X8RY\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/test/StorageLayout.sol\":{\"keccak256\":\"0x882324ce7675e2c82fc6168f50371e67b6c47bf4d8216dbd865b3460b47b8d0d\",\"urls\":[\"bzz-raw://9481e9d5bf48e2ed27010d31dcecafc8ea10605348c2f0a7239e6e4458f23311\",\"dweb:/ipfs/QmPf8MEGv5NxePVGn7pgESx8rKYvgcGeC1fMygee3rKr9Q\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x60806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3614799806100576000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80636b4169c3116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b31461074c578063f2fde38b1461076e578063fc0c546a14610781578063fdbbf8ac14610789576103a4565b8063d888479514610708578063db006a751461071e578063dd62ed3e14610731578063e192782b14610744576103a4565b8063c200659e116100e9578063c200659e146106c7578063d007c644146106cf578063d271be3f146106e2578063d3ac25c4146106f5576103a4565b8063bf5bfdfb146106bf578063c034d0db146104f5578063c1a2007d14610431576103a4565b80638da5cb5b11610187578063a3a7e7f311610156578063a3a7e7f31461067e578063a9059cbb14610691578063b2bdfa7b146106a4578063b5dbfc1a146106ac576103a4565b80638da5cb5b146106535780638f32d59b1461065b57806395d89b4114610663578063a0712d681461066b576103a4565b806371ee46eb116101c357806371ee46eb1461062557806377ede0511461062d57806381c8d895146103d257806384d4b41014610640576103a4565b80636b4169c3146105f557806370a082311461060a578063715018a61461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636901f668146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b7366004613748565b61079c565b6040516103c99190614364565b60405180910390f35b6103da61080f565b6040516103c9919061438d565b6103fa6103f5366004613748565b61081b565b6040516103c993929190614575565b61041161084a565b6040516103c991906143a9565b6103bc61042c36600461380b565b6108d5565b610439610943565b6040516103c991906142d3565b6103da610454366004613748565b610953565b6103bc610975565b6103da610985565b61047c61047736600461398e565b61098b565b6040516103c992919061433f565b6104926109a1565b6040516103c9919061461a565b6103bc6104ad3660046137be565b6109a9565b6104c56104c0366004613748565b610a01565b6040516103c9919061454a565b6103bc6104e036600461398e565b610b52565b6103bc610b97565b6103da610bff565b6103da610c05565b6103bc61050b366004613a33565b610c0b565b6103da610c60565b61052b610526366004613748565b610c6a565b005b61052b61053b36600461380b565b610cff565b6103da61054e366004613748565b610d56565b61052b6105613660046138fd565b610d68565b61057961057436600461398e565b610fa5565b6040516103c99190614567565b6103da610fe7565b61059661100b565b6040516103c9919061439b565b6103da6105b136600461383b565b61101a565b6105c96105c4366004613748565b6110d1565b6040516103c99594939291906145ce565b6103da6105e8366004613784565b611100565b61052b61111d565b6105fd611126565b6040516103c99190614559565b6103da610618366004613748565b611156565b61052b611174565b6103da6111e2565b6103da61063b366004613748565b6111e8565b6103bc61064e366004613784565b611210565b61043961125a565b6103bc611269565b61041161127a565b6103bc61067936600461398e565b6112d5565b6103bc61068c366004613748565b6112eb565b6103bc61069f36600461380b565b611336565b610439611388565b6103bc6106ba3660046139ac565b611397565b6103da611457565b6103da61145d565b6103bc6106dd366004613748565b611463565b6103bc6106f036600461380b565b611479565b61052b610703366004613748565b61149a565b6107106118d6565b6040516103c99291906145b2565b6103bc61072c36600461398e565b6118eb565b6103da61073f366004613784565b61190c565b6103da611937565b61075f61075a36600461398e565b61193c565b6040516103c9939291906145c0565b61052b61077c366004613748565b61195d565b61059661198d565b6103da610797366004613748565b61199c565b60018054810190819055600090336107b3816119cc565b6001600160a01b0381166000908152600c60205260409020600101546107da908590611b75565b600192505060015481146108095760405162461bcd60e51b81526004016108009061452a565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084083611ccf565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061092f90879061438d565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061099783611ccf565b9094909350915050565b63ffffffff81565b600180548101908190556000906109bf856119cc565b6109cb33868686611e31565b6109d4846119cc565b6001915060015481146109f95760405162461bcd60e51b81526004016108009061452a565b509392505050565b610a096133df565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a5e816120ad565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a99578354610a9c565b60005b81548110610aa657fe5b90600052602060002090600202019050826000015460001480610acb57508254600019145b15610aec57610ae284602001518560400151612100565b60e0850152610b4a565b60005b6001820154811015610b4857836003016000836000018381548110610b1057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610aef565b505b505050919050565b60018054810190819055600090610b69338461211b565b610b72336119cc565b6001915060015481146108095760405162461bcd60e51b81526004016108009061452a565b6001805481019081905560009033610bae816119cc565b6001600160a01b0381166000908152600c6020526040902060010154610bd5908290611b75565b60019250506001548114610bfb5760405162461bcd60e51b81526004016108009061452a565b5090565b60045481565b60001981565b60018054810190819055600090610c22338461211b565b610c2b84612201565b610c34336119cc565b600191506001548114610c595760405162461bcd60e51b81526004016108009061452a565b5092915050565b600b546000190190565b610c72611269565b610c8e5760405162461bcd60e51b8152600401610800906144ba565b600054600160a01b900460ff161515600114610cbc5760405162461bcd60e51b81526004016108009061450a565b610cc5816124ff565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cf491906142d3565b60405180910390a150565b610d07611269565b610d235760405162461bcd60e51b8152600401610800906144ba565b610d2c826125d2565b610d485760405162461bcd60e51b81526004016108009061445a565b610d52828261211b565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d925760405162461bcd60e51b81526004016108009061444a565b610d9a6125d8565b600080546001600160a01b03191633179055600180558251610dc3906002906020860190613424565b508151610dd7906003906020850190613424565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e799190810190613766565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f0c9284929091019061349e565b506020828101518051610f2592600185019201906134ff565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f97926001600160a01b0390911691614324565b60405180910390a150505050565b610fad6135aa565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fdc906125ed565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109492918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061268b92505050565b915082156110a6576110a6338361211b565b60015481146110c75760405162461bcd60e51b81526004016108009061452a565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b600e6000610d52565b61112e6135cb565b600061113b6008546128cc565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61117c611269565b6111985760405162461bcd60e51b8152600401610800906144ba565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c60205260408120611209816120ad565b9392505050565b60018054810190819055600090611226846119cc565b6001600160a01b0384166000908152600c602052604090206001015461125190339086908690611e31565b610c34836119cc565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b60018054810190819055600090610b6983612201565b6001805481019081905560009033611302816119cc565b6001600160a01b0381166000908152600c602052604090206001015461132d90829081908790611e31565b6107da846119cc565b600180548101908190556000903361134d816119cc565b61135981828787611e31565b611362856119cc565b60019250506001548114610c595760405162461bcd60e51b81526004016108009061452a565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114139290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061268b92505050565b905061141f338261211b565b61142888612201565b611431336119cc565b600192505060015481146110c75760405162461bcd60e51b81526004016108009061452a565b60015481565b60095481565b60018054810190819055600090610b72836119cc565b6001805481019081905560009033611490816119cc565b6113628585611b75565b600180548101908190556114ac611269565b6114c85760405162461bcd60e51b8152600401610800906144ba565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561151357600080fd5b505afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061154b9190810190613766565b6001600160a01b0316146115715760405162461bcd60e51b81526004016108009061448a565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116029190810190613a52565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906116399030906004016142d3565b60206040518083038186803b15801561165157600080fd5b505afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168991908101906138df565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926116c19216908590600401614324565b602060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061171391908101906138c1565b61172f5760405162461bcd60e51b81526004016108009061443a565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061176090859060040161438d565b602060405180830381600087803b15801561177a57600080fd5b505af115801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117b291908101906138df565b6006549091506001600160a01b0385811691161461183057836001600160a01b031663f2fde38b6117e161125a565b6040518263ffffffff1660e01b81526004016117fd91906142d3565b600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050505b600061183d60085461292b565b60095490915061186383611857878463ffffffff61294e16565b9063ffffffff61298816565b60095561186f826129ca565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a916118a6918c9190614324565b60405180910390a1505050505050506001548114610d525760405162461bcd60e51b81526004016108009061452a565b6008546000906118e5816128cc565b91509091565b6001805481019081905560009033611902816119cc565b6107da8185611b75565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b611965611269565b6119815760405162461bcd60e51b8152600401610800906144ba565b61198a816129ec565b50565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c60205260408120600581015482906119c4906125ed565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a6491908101906138c1565b611a805760405162461bcd60e51b8152600401610800906143ba565b6000611a8b836120ad565b90508015611b6f578154611aa5908263ffffffff612a6d16565b82556002830154611abc908263ffffffff612a6d16565b60028401556001830154611ad6908263ffffffff612a6d16565b6001840155600554611aee908263ffffffff612a6d16565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b2c90849061438d565b60405180910390a2836001600160a01b031660006001600160a01b031660008051602061473783398151915283604051611b66919061438d565b60405180910390a35b50505050565b336000908152600c6020526040902081611ba15760405162461bcd60e51b8152600401610800906144da565b8060010154821115611bc55760405162461bcd60e51b81526004016108009061447a565b611bcf3383612a92565b6001810154611be4908363ffffffff612b4e16565b6001820155600554611bfc908363ffffffff612b4e16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c319086908690600401614324565b602060405180830381600087803b158015611c4b57600080fd5b505af1158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c8391908101906138c1565b611c9f5760405162461bcd60e51b81526004016108009061449a565b604051600090339060008051602061473783398151915290611cc290869061438d565b60405180910390a3505050565b6060808215801590611ce357506000198314155b15611e1257611cf06135e5565b600b8481548110611cfd57fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611d6f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d51575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611df357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611db65790505b5050505050815250509050806000015192508060200151915050611e2c565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611e635760405162461bcd60e51b81526004016108009061446a565b6001600160a01b0383166000908152600c6020526040902060010154811115611e9e5760405162461bcd60e51b8152600401610800906144ca565b60006001600160a01b038581169085161415611ebd5750600019611ee5565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f055760405162461bcd60e51b8152600401610800906143ca565b6000611f17828463ffffffff612b4e16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f47908563ffffffff612b4e16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f77908663ffffffff612a6d16565b90506000198414611fab576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b6000611fb78887612b90565b9050611fc4878783612c3f565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061201a57506001600160a01b0387166000908152600c6020526040902054155b801561204057506001600160a01b0388166000908152600c602052604090205460001914155b15612069576001600160a01b0388166000908152600c602052604090205461206990889061211b565b866001600160a01b0316886001600160a01b03166000805160206147378339815191528860405161209a919061438d565b60405180910390a3505050505050505050565b6000806120bd83600501546125ed565b90506120da83600201548460040154612a6d90919063ffffffff16565b8111156120f65782600201548360040154820303915050610970565b6000915050610970565b6000818310156121125750600061093d565b5080820361093d565b60001981148061212c5750600b5481105b6121485760405162461bcd60e51b81526004016108009061440a565b6001600160a01b0382166000908152600c602090815260408083208054808552600e909352818420858552919093206001840154156121ae576000612191878660010154612b90565b86865560018601549091506121a890889083612c3f565b506121b2565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e9061223390339030906004016142e1565b60206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061228391908101906138df565b10156122a15760405162461bcd60e51b8152600401610800906144ea565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd916122e69190309087906004016142fc565b602060405180830381600087803b15801561230057600080fd5b505af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061233891908101906138c1565b6123545760405162461bcd60e51b81526004016108009061449a565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261238a929116908690600401614324565b602060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123dc91908101906138c1565b6123f85760405162461bcd60e51b81526004016108009061443a565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061242990869060040161438d565b602060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061247b91908101906138df565b600554909150612491908463ffffffff612a6d16565b60055560018201546124a9908463ffffffff612a6d16565b60018301556008546124c1908263ffffffff612a6d16565b60085560006124cf8261292b565b90506124dc338583612c3f565b604051339060009060008051602061473783398151915290611b6690889061438d565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561253857600080fd5b505afa15801561254c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061257091908101906138df565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125ae5760405162461bcd60e51b8152600401610800906143da565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061093d600954611857600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561264657600080fd5b505afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061267e91908101906138df565b859063ffffffff61294e16565b60008060008451116126af5760405162461bcd60e51b81526004016108009061453a565b6032845111156126d15760405162461bcd60e51b8152600401610800906144fa565b82518451146126f25760405162461bcd60e51b8152600401610800906143fa565b506000805b84518210156127a857600084838151811061270e57fe5b602002602001015163ffffffff16116127395760405162461bcd60e51b81526004016108009061451a565b60006001600160a01b031685838151811061275057fe5b60200260200101516001600160a01b0316141561277f5760405162461bcd60e51b81526004016108009061442a565b83828151811061278b57fe5b602002602001015163ffffffff16810190508160010191506126f7565b600091505b8351821015612812578063ffffffff80168584815181106127ca57fe5b602002602001015163ffffffff1602816127e057fe5b048483815181106127ed57fe5b602002602001019063ffffffff16908163ffffffff16815250508160010191506127ad565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128789284929091019061349e565b50602082810151805161289192600185019201906134ff565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061093d670de0b6b3a7640000611857600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561264657600080fd5b600061093d670de0b6b3a76400006118576009548561294e90919063ffffffff16565b60008261295d5750600061093d565b8282028284828161296a57fe5b04146112095760405162461bcd60e51b8152600401610800906144aa565b600061120983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee7565b60095460009061093d9061185784670de0b6b3a764000063ffffffff61294e16565b6001600160a01b038116612a125760405162461bcd60e51b8152600401610800906143ea565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156112095760405162461bcd60e51b81526004016108009061441a565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612ac390859060040161438d565b602060405180830381600087803b158015612add57600080fd5b505af1158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b1591908101906138df565b9050612b208161292b565b50612b2b8383612f1e565b806008541115612b4357600880548290039055612b49565b60006008555b505050565b600061120983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061320b565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c0e91908101906138c1565b612c2a5760405162461bcd60e51b8152600401610800906143ba565b612c3382613237565b905061093d8383612f1e565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612c6e578254612c71565b60005b81548110612c7b57fe5b600091825260208220600290910201805490925015612e985750600084845b6001840154831015612e91576000600c6000866000018681548110612cbb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d465763ffffffff8016612d39886001018881548110612d0c57fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061294e16565b81612d4057fe5b04612d48565b845b9050612d94818960030160008a6000018a81548110612d6357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612a6d16565b886003016000896000018981548110612da957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612de3908263ffffffff612a6d16565b6004840155612df28582612100565b9450600082612e215763ffffffff8016612e14896001018981548110612d0c57fe5b81612e1b57fe5b04612e23565b845b6005850154909150612e3b908263ffffffff612a6d16565b6005850155612e4a8582612100565b9450612e828c896000018981548110612e5f57fe5b6000918252602090912001548b546001600160a01b0390911690600186866132d6565b50505050826001019250612c9a565b5050612edf565b6004830154612ead908663ffffffff612a6d16565b60048401556005830154612ec7908563ffffffff612a6d16565b60058401558254612edf9087908190600189896132d6565b505050505050565b60008183612f085760405162461bcd60e51b815260040161080091906143a9565b506000838581612f1457fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f4d578254612f50565b60005b81548110612f5a57fe5b906000526020600020906002020190506000612f7e83600101548460020154612100565b905083811115612f8b5750825b6000612f9682613237565b83549091501561319757818160005b600186015481101561318f576000600c6000886000018481548110612fc657fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130515763ffffffff80166130448a600101868154811061301757fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061294e16565b8161304b57fe5b04613053565b855b9050613063836004015482612100565b83600401819055506130ae8a60030160008b600001878154811061308357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205482612100565b8a60030160008b60000187815481106130c357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556130f28682612100565b95506000826131215763ffffffff80166131148b600101878154811061301757fe5b8161311b57fe5b04613123565b855b9050613133846005015482612100565b60058501556131428682612100565b955061314d846133ad565b6131808d8b600001878154811061316057fe5b60009182526020822001548e546001600160a01b039091169186866132d6565b50505050806001019050612fa5565b5050506131da565b6131a5846004015483612100565b600485015560058401546131b99082612100565b60058501556131c7846133ad565b6131da86878660000154600086866132d6565b81851115612edf576131ed828603613237565b90506131fd846005015482612100565b6005850155612edf846133ad565b6000818484111561322f5760405162461bcd60e51b815260040161080091906143a9565b505050900390565b600061093d600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561328a57600080fd5b505afa15801561329e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132c291908101906138df565b60095461185790859063ffffffff61294e16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d2987878760405161333593929190614372565b60405180910390a4831561337c576001810154613358908463ffffffff612a6d16565b60018201556002810154613372908363ffffffff612a6d16565b60028201556133a4565b61338a816001015484612100565b6001820155600281015461339e9083612100565b60028201555b50505050505050565b60006133bc82600501546125ed565b90508160040154810382600201541115610d525760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061346557805160ff1916838001178555613492565b82800160010185558215613492579182015b82811115613492578251825591602001919060010190613477565b50610bfb9291506135ff565b8280548282559060005260206000209081019282156134f3579160200282015b828111156134f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906134be565b50610bfb929150613619565b8280548282559060005260206000209060070160089004810192821561359e5791602002820160005b8382111561356c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613528565b801561359c5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261356c565b505b50610bfb92915061363d565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095091905b80821115610bfb5760008155600101613605565b61095091905b80821115610bfb5780546001600160a01b031916815560010161361f565b61095091905b80821115610bfb57805463ffffffff19168155600101613643565b803561093d81614707565b805161093d81614707565b60008083601f84011261368657600080fd5b50813567ffffffffffffffff81111561369e57600080fd5b6020830191508360208202830111156136b657600080fd5b9250929050565b803561093d8161471b565b805161093d8161471b565b805161093d81614724565b803561093d8161472d565b600082601f8301126136fa57600080fd5b813561370d6137088261464f565b614628565b9150808252602083016020830185838301111561372957600080fd5b6137348382846146c5565b50505092915050565b803561093d81614724565b60006020828403121561375a57600080fd5b60006119c4848461365e565b60006020828403121561377857600080fd5b60006119c48484613669565b6000806040838503121561379757600080fd5b60006137a3858561365e565b92505060206137b48582860161365e565b9150509250929050565b6000806000606084860312156137d357600080fd5b60006137df868661365e565b93505060206137f08682870161365e565b92505060406138018682870161373d565b9150509250925092565b6000806040838503121561381e57600080fd5b600061382a858561365e565b92505060206137b48582860161373d565b60008060008060006060868803121561385357600080fd5b853567ffffffffffffffff81111561386a57600080fd5b61387688828901613674565b9550955050602086013567ffffffffffffffff81111561389557600080fd5b6138a188828901613674565b935093505060406138b4888289016136bd565b9150509295509295909350565b6000602082840312156138d357600080fd5b60006119c484846136c8565b6000602082840312156138f157600080fd5b60006119c484846136d3565b6000806000806080858703121561391357600080fd5b600061391f87876136de565b945050602085013567ffffffffffffffff81111561393c57600080fd5b613948878288016136e9565b935050604085013567ffffffffffffffff81111561396557600080fd5b613971878288016136e9565b92505060606139828782880161373d565b91505092959194509250565b6000602082840312156139a057600080fd5b60006119c4848461373d565b6000806000806000606086880312156139c457600080fd5b60006139d0888861373d565b955050602086013567ffffffffffffffff8111156139ed57600080fd5b6139f988828901613674565b9450945050604086013567ffffffffffffffff811115613a1857600080fd5b613a2488828901613674565b92509250509295509295909350565b60008060408385031215613a4657600080fd5b600061382a858561373d565b60008060408385031215613a6557600080fd5b6000613a7185856136d3565b92505060206137b4858286016136d3565b6000613a8e8383613ab1565b505060200190565b6000613a8e83836142ca565b613aab816146ba565b82525050565b613aab8161468a565b6000613ac58261467d565b613acf8185614681565b9350613ada83614677565b8060005b83811015613b08578151613af28882613a82565b9750613afd83614677565b925050600101613ade565b509495945050505050565b6000613b1e8261467d565b613b288185614681565b9350613b3383614677565b8060005b83811015613b08578151613b4b8882613a96565b9750613b5683614677565b925050600101613b37565b613aab81614695565b613aab81610950565b613aab8161469a565b6000613b878261467d565b613b918185614681565b9350613ba18185602086016146d1565b613baa816146fd565b9093019392505050565b6000613bc1601583614681565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613bf2602183614681565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613c35600e83614681565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613c5f602683614681565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613ca7602083614681565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613ce0600e83614681565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d0a601b83614681565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613d43602883614681565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613d8d601483614681565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613dbd602983614681565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e08602e83614681565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613e58601883614681565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613e91601c83614681565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613eca603283614681565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f1e601583614681565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613f4f602183614681565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613f92602083614681565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613fcb601e83614681565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614004601c83614681565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b600061403d601483614681565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b600061406d603283614681565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006140c1603383614681565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614116602f83614681565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b6000614167601f83614681565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b60006141a0602383614681565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906141ea8482613b6a565b5060208201516141fd6020850182613b6a565b5060408201516142106040850182613b6a565b5060608201516142236060850182613b6a565b5060808201516142366080850182613b6a565b5060a082015161424960a0850182613b6a565b5060c082015161425c60c0850182613b6a565b5060e0820151611b6f60e0850182613b6a565b805160408301906142808482613b6a565b506020820151611b6f6020850182613b6a565b805160608301906142a48482613b6a565b5060208201516142b76020850182613b6a565b506040820151611b6f6040850182613b6a565b613aab816146b1565b6020810161093d8284613ab1565b604081016142ef8285613aa2565b6112096020830184613ab1565b6060810161430a8286613aa2565b6143176020830185613ab1565b6119c46040830184613b6a565b604081016143328285613ab1565b6112096020830184613b6a565b604080825281016143508185613aba565b905081810360208301526119c48184613b13565b6020810161093d8284613b61565b606081016143808286613b61565b6143176020830185613b6a565b6020810161093d8284613b6a565b6020810161093d8284613b73565b602080825281016112098184613b7c565b6020808252810161093d81613bb4565b6020808252810161093d81613be5565b6020808252810161093d81613c28565b6020808252810161093d81613c52565b6020808252810161093d81613c9a565b6020808252810161093d81613cd3565b6020808252810161093d81613cfd565b6020808252810161093d81613d36565b6020808252810161093d81613d80565b6020808252810161093d81613db0565b6020808252810161093d81613dfb565b6020808252810161093d81613e4b565b6020808252810161093d81613e84565b6020808252810161093d81613ebd565b6020808252810161093d81613f11565b6020808252810161093d81613f42565b6020808252810161093d81613f85565b6020808252810161093d81613fbe565b6020808252810161093d81613ff7565b6020808252810161093d81614030565b6020808252810161093d81614060565b6020808252810161093d816140b4565b6020808252810161093d81614109565b6020808252810161093d8161415a565b6020808252810161093d81614193565b610100810161093d82846141d8565b6040810161093d828461426f565b6060810161093d8284614293565b606081016145838286613b6a565b81810360208301526145958185613aba565b905081810360408301526145a98184613b13565b95945050505050565b604081016143328285613b6a565b606081016143808286613b6a565b60a081016145dc8288613b6a565b6145e96020830187613b6a565b6145f66040830186613b6a565b6146036060830185613b6a565b6146106080830184613b6a565b9695505050505050565b6020810161093d82846142ca565b60405181810167ffffffffffffffff8111828210171561464757600080fd5b604052919050565b600067ffffffffffffffff82111561466657600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061093d826146a5565b151590565b600061093d8261468a565b6001600160a01b031690565b63ffffffff1690565b600061093d8261469a565b82818337506000910152565b60005b838110156146ec5781810151838201526020016146d4565b83811115611b6f5750506000910152565b601f01601f191690565b6147108161468a565b811461198a57600080fd5b61471081614695565b61471081610950565b6147108161469a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820793f9efa8f8cf0a426899d6516f9385e6113e99dd5393e43645dd9e59bcff1a26c6578706572696d656e74616cf564736f6c634300050c0040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103a45760003560e01c80636b4169c3116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b31461074c578063f2fde38b1461076e578063fc0c546a14610781578063fdbbf8ac14610789576103a4565b8063d888479514610708578063db006a751461071e578063dd62ed3e14610731578063e192782b14610744576103a4565b8063c200659e116100e9578063c200659e146106c7578063d007c644146106cf578063d271be3f146106e2578063d3ac25c4146106f5576103a4565b8063bf5bfdfb146106bf578063c034d0db146104f5578063c1a2007d14610431576103a4565b80638da5cb5b11610187578063a3a7e7f311610156578063a3a7e7f31461067e578063a9059cbb14610691578063b2bdfa7b146106a4578063b5dbfc1a146106ac576103a4565b80638da5cb5b146106535780638f32d59b1461065b57806395d89b4114610663578063a0712d681461066b576103a4565b806371ee46eb116101c357806371ee46eb1461062557806377ede0511461062d57806381c8d895146103d257806384d4b41014610640576103a4565b80636b4169c3146105f557806370a082311461060a578063715018a61461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636901f668146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b7366004613748565b61079c565b6040516103c99190614364565b60405180910390f35b6103da61080f565b6040516103c9919061438d565b6103fa6103f5366004613748565b61081b565b6040516103c993929190614575565b61041161084a565b6040516103c991906143a9565b6103bc61042c36600461380b565b6108d5565b610439610943565b6040516103c991906142d3565b6103da610454366004613748565b610953565b6103bc610975565b6103da610985565b61047c61047736600461398e565b61098b565b6040516103c992919061433f565b6104926109a1565b6040516103c9919061461a565b6103bc6104ad3660046137be565b6109a9565b6104c56104c0366004613748565b610a01565b6040516103c9919061454a565b6103bc6104e036600461398e565b610b52565b6103bc610b97565b6103da610bff565b6103da610c05565b6103bc61050b366004613a33565b610c0b565b6103da610c60565b61052b610526366004613748565b610c6a565b005b61052b61053b36600461380b565b610cff565b6103da61054e366004613748565b610d56565b61052b6105613660046138fd565b610d68565b61057961057436600461398e565b610fa5565b6040516103c99190614567565b6103da610fe7565b61059661100b565b6040516103c9919061439b565b6103da6105b136600461383b565b61101a565b6105c96105c4366004613748565b6110d1565b6040516103c99594939291906145ce565b6103da6105e8366004613784565b611100565b61052b61111d565b6105fd611126565b6040516103c99190614559565b6103da610618366004613748565b611156565b61052b611174565b6103da6111e2565b6103da61063b366004613748565b6111e8565b6103bc61064e366004613784565b611210565b61043961125a565b6103bc611269565b61041161127a565b6103bc61067936600461398e565b6112d5565b6103bc61068c366004613748565b6112eb565b6103bc61069f36600461380b565b611336565b610439611388565b6103bc6106ba3660046139ac565b611397565b6103da611457565b6103da61145d565b6103bc6106dd366004613748565b611463565b6103bc6106f036600461380b565b611479565b61052b610703366004613748565b61149a565b6107106118d6565b6040516103c99291906145b2565b6103bc61072c36600461398e565b6118eb565b6103da61073f366004613784565b61190c565b6103da611937565b61075f61075a36600461398e565b61193c565b6040516103c9939291906145c0565b61052b61077c366004613748565b61195d565b61059661198d565b6103da610797366004613748565b61199c565b60018054810190819055600090336107b3816119cc565b6001600160a01b0381166000908152600c60205260409020600101546107da908590611b75565b600192505060015481146108095760405162461bcd60e51b81526004016108009061452a565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084083611ccf565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061092f90879061438d565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061099783611ccf565b9094909350915050565b63ffffffff81565b600180548101908190556000906109bf856119cc565b6109cb33868686611e31565b6109d4846119cc565b6001915060015481146109f95760405162461bcd60e51b81526004016108009061452a565b509392505050565b610a096133df565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a5e816120ad565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a99578354610a9c565b60005b81548110610aa657fe5b90600052602060002090600202019050826000015460001480610acb57508254600019145b15610aec57610ae284602001518560400151612100565b60e0850152610b4a565b60005b6001820154811015610b4857836003016000836000018381548110610b1057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610aef565b505b505050919050565b60018054810190819055600090610b69338461211b565b610b72336119cc565b6001915060015481146108095760405162461bcd60e51b81526004016108009061452a565b6001805481019081905560009033610bae816119cc565b6001600160a01b0381166000908152600c6020526040902060010154610bd5908290611b75565b60019250506001548114610bfb5760405162461bcd60e51b81526004016108009061452a565b5090565b60045481565b60001981565b60018054810190819055600090610c22338461211b565b610c2b84612201565b610c34336119cc565b600191506001548114610c595760405162461bcd60e51b81526004016108009061452a565b5092915050565b600b546000190190565b610c72611269565b610c8e5760405162461bcd60e51b8152600401610800906144ba565b600054600160a01b900460ff161515600114610cbc5760405162461bcd60e51b81526004016108009061450a565b610cc5816124ff565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cf491906142d3565b60405180910390a150565b610d07611269565b610d235760405162461bcd60e51b8152600401610800906144ba565b610d2c826125d2565b610d485760405162461bcd60e51b81526004016108009061445a565b610d52828261211b565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d925760405162461bcd60e51b81526004016108009061444a565b610d9a6125d8565b600080546001600160a01b03191633179055600180558251610dc3906002906020860190613424565b508151610dd7906003906020850190613424565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e799190810190613766565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f0c9284929091019061349e565b506020828101518051610f2592600185019201906134ff565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f97926001600160a01b0390911691614324565b60405180910390a150505050565b610fad6135aa565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fdc906125ed565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109492918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061268b92505050565b915082156110a6576110a6338361211b565b60015481146110c75760405162461bcd60e51b81526004016108009061452a565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b600e6000610d52565b61112e6135cb565b600061113b6008546128cc565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61117c611269565b6111985760405162461bcd60e51b8152600401610800906144ba565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c60205260408120611209816120ad565b9392505050565b60018054810190819055600090611226846119cc565b6001600160a01b0384166000908152600c602052604090206001015461125190339086908690611e31565b610c34836119cc565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b60018054810190819055600090610b6983612201565b6001805481019081905560009033611302816119cc565b6001600160a01b0381166000908152600c602052604090206001015461132d90829081908790611e31565b6107da846119cc565b600180548101908190556000903361134d816119cc565b61135981828787611e31565b611362856119cc565b60019250506001548114610c595760405162461bcd60e51b81526004016108009061452a565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114139290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061268b92505050565b905061141f338261211b565b61142888612201565b611431336119cc565b600192505060015481146110c75760405162461bcd60e51b81526004016108009061452a565b60015481565b60095481565b60018054810190819055600090610b72836119cc565b6001805481019081905560009033611490816119cc565b6113628585611b75565b600180548101908190556114ac611269565b6114c85760405162461bcd60e51b8152600401610800906144ba565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561151357600080fd5b505afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061154b9190810190613766565b6001600160a01b0316146115715760405162461bcd60e51b81526004016108009061448a565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116029190810190613a52565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906116399030906004016142d3565b60206040518083038186803b15801561165157600080fd5b505afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168991908101906138df565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926116c19216908590600401614324565b602060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061171391908101906138c1565b61172f5760405162461bcd60e51b81526004016108009061443a565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061176090859060040161438d565b602060405180830381600087803b15801561177a57600080fd5b505af115801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117b291908101906138df565b6006549091506001600160a01b0385811691161461183057836001600160a01b031663f2fde38b6117e161125a565b6040518263ffffffff1660e01b81526004016117fd91906142d3565b600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050505b600061183d60085461292b565b60095490915061186383611857878463ffffffff61294e16565b9063ffffffff61298816565b60095561186f826129ca565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a916118a6918c9190614324565b60405180910390a1505050505050506001548114610d525760405162461bcd60e51b81526004016108009061452a565b6008546000906118e5816128cc565b91509091565b6001805481019081905560009033611902816119cc565b6107da8185611b75565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b611965611269565b6119815760405162461bcd60e51b8152600401610800906144ba565b61198a816129ec565b50565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c60205260408120600581015482906119c4906125ed565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a6491908101906138c1565b611a805760405162461bcd60e51b8152600401610800906143ba565b6000611a8b836120ad565b90508015611b6f578154611aa5908263ffffffff612a6d16565b82556002830154611abc908263ffffffff612a6d16565b60028401556001830154611ad6908263ffffffff612a6d16565b6001840155600554611aee908263ffffffff612a6d16565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b2c90849061438d565b60405180910390a2836001600160a01b031660006001600160a01b031660008051602061473783398151915283604051611b66919061438d565b60405180910390a35b50505050565b336000908152600c6020526040902081611ba15760405162461bcd60e51b8152600401610800906144da565b8060010154821115611bc55760405162461bcd60e51b81526004016108009061447a565b611bcf3383612a92565b6001810154611be4908363ffffffff612b4e16565b6001820155600554611bfc908363ffffffff612b4e16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c319086908690600401614324565b602060405180830381600087803b158015611c4b57600080fd5b505af1158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c8391908101906138c1565b611c9f5760405162461bcd60e51b81526004016108009061449a565b604051600090339060008051602061473783398151915290611cc290869061438d565b60405180910390a3505050565b6060808215801590611ce357506000198314155b15611e1257611cf06135e5565b600b8481548110611cfd57fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611d6f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d51575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611df357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611db65790505b5050505050815250509050806000015192508060200151915050611e2c565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611e635760405162461bcd60e51b81526004016108009061446a565b6001600160a01b0383166000908152600c6020526040902060010154811115611e9e5760405162461bcd60e51b8152600401610800906144ca565b60006001600160a01b038581169085161415611ebd5750600019611ee5565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f055760405162461bcd60e51b8152600401610800906143ca565b6000611f17828463ffffffff612b4e16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f47908563ffffffff612b4e16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f77908663ffffffff612a6d16565b90506000198414611fab576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b6000611fb78887612b90565b9050611fc4878783612c3f565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061201a57506001600160a01b0387166000908152600c6020526040902054155b801561204057506001600160a01b0388166000908152600c602052604090205460001914155b15612069576001600160a01b0388166000908152600c602052604090205461206990889061211b565b866001600160a01b0316886001600160a01b03166000805160206147378339815191528860405161209a919061438d565b60405180910390a3505050505050505050565b6000806120bd83600501546125ed565b90506120da83600201548460040154612a6d90919063ffffffff16565b8111156120f65782600201548360040154820303915050610970565b6000915050610970565b6000818310156121125750600061093d565b5080820361093d565b60001981148061212c5750600b5481105b6121485760405162461bcd60e51b81526004016108009061440a565b6001600160a01b0382166000908152600c602090815260408083208054808552600e909352818420858552919093206001840154156121ae576000612191878660010154612b90565b86865560018601549091506121a890889083612c3f565b506121b2565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e9061223390339030906004016142e1565b60206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061228391908101906138df565b10156122a15760405162461bcd60e51b8152600401610800906144ea565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd916122e69190309087906004016142fc565b602060405180830381600087803b15801561230057600080fd5b505af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061233891908101906138c1565b6123545760405162461bcd60e51b81526004016108009061449a565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261238a929116908690600401614324565b602060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123dc91908101906138c1565b6123f85760405162461bcd60e51b81526004016108009061443a565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061242990869060040161438d565b602060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061247b91908101906138df565b600554909150612491908463ffffffff612a6d16565b60055560018201546124a9908463ffffffff612a6d16565b60018301556008546124c1908263ffffffff612a6d16565b60085560006124cf8261292b565b90506124dc338583612c3f565b604051339060009060008051602061473783398151915290611b6690889061438d565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561253857600080fd5b505afa15801561254c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061257091908101906138df565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125ae5760405162461bcd60e51b8152600401610800906143da565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061093d600954611857600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561264657600080fd5b505afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061267e91908101906138df565b859063ffffffff61294e16565b60008060008451116126af5760405162461bcd60e51b81526004016108009061453a565b6032845111156126d15760405162461bcd60e51b8152600401610800906144fa565b82518451146126f25760405162461bcd60e51b8152600401610800906143fa565b506000805b84518210156127a857600084838151811061270e57fe5b602002602001015163ffffffff16116127395760405162461bcd60e51b81526004016108009061451a565b60006001600160a01b031685838151811061275057fe5b60200260200101516001600160a01b0316141561277f5760405162461bcd60e51b81526004016108009061442a565b83828151811061278b57fe5b602002602001015163ffffffff16810190508160010191506126f7565b600091505b8351821015612812578063ffffffff80168584815181106127ca57fe5b602002602001015163ffffffff1602816127e057fe5b048483815181106127ed57fe5b602002602001019063ffffffff16908163ffffffff16815250508160010191506127ad565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128789284929091019061349e565b50602082810151805161289192600185019201906134ff565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061093d670de0b6b3a7640000611857600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561264657600080fd5b600061093d670de0b6b3a76400006118576009548561294e90919063ffffffff16565b60008261295d5750600061093d565b8282028284828161296a57fe5b04146112095760405162461bcd60e51b8152600401610800906144aa565b600061120983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ee7565b60095460009061093d9061185784670de0b6b3a764000063ffffffff61294e16565b6001600160a01b038116612a125760405162461bcd60e51b8152600401610800906143ea565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156112095760405162461bcd60e51b81526004016108009061441a565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612ac390859060040161438d565b602060405180830381600087803b158015612add57600080fd5b505af1158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b1591908101906138df565b9050612b208161292b565b50612b2b8383612f1e565b806008541115612b4357600880548290039055612b49565b60006008555b505050565b600061120983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061320b565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c0e91908101906138c1565b612c2a5760405162461bcd60e51b8152600401610800906143ba565b612c3382613237565b905061093d8383612f1e565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612c6e578254612c71565b60005b81548110612c7b57fe5b600091825260208220600290910201805490925015612e985750600084845b6001840154831015612e91576000600c6000866000018681548110612cbb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d465763ffffffff8016612d39886001018881548110612d0c57fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061294e16565b81612d4057fe5b04612d48565b845b9050612d94818960030160008a6000018a81548110612d6357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612a6d16565b886003016000896000018981548110612da957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612de3908263ffffffff612a6d16565b6004840155612df28582612100565b9450600082612e215763ffffffff8016612e14896001018981548110612d0c57fe5b81612e1b57fe5b04612e23565b845b6005850154909150612e3b908263ffffffff612a6d16565b6005850155612e4a8582612100565b9450612e828c896000018981548110612e5f57fe5b6000918252602090912001548b546001600160a01b0390911690600186866132d6565b50505050826001019250612c9a565b5050612edf565b6004830154612ead908663ffffffff612a6d16565b60048401556005830154612ec7908563ffffffff612a6d16565b60058401558254612edf9087908190600189896132d6565b505050505050565b60008183612f085760405162461bcd60e51b815260040161080091906143a9565b506000838581612f1457fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f4d578254612f50565b60005b81548110612f5a57fe5b906000526020600020906002020190506000612f7e83600101548460020154612100565b905083811115612f8b5750825b6000612f9682613237565b83549091501561319757818160005b600186015481101561318f576000600c6000886000018481548110612fc657fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130515763ffffffff80166130448a600101868154811061301757fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061294e16565b8161304b57fe5b04613053565b855b9050613063836004015482612100565b83600401819055506130ae8a60030160008b600001878154811061308357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205482612100565b8a60030160008b60000187815481106130c357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556130f28682612100565b95506000826131215763ffffffff80166131148b600101878154811061301757fe5b8161311b57fe5b04613123565b855b9050613133846005015482612100565b60058501556131428682612100565b955061314d846133ad565b6131808d8b600001878154811061316057fe5b60009182526020822001548e546001600160a01b039091169186866132d6565b50505050806001019050612fa5565b5050506131da565b6131a5846004015483612100565b600485015560058401546131b99082612100565b60058501556131c7846133ad565b6131da86878660000154600086866132d6565b81851115612edf576131ed828603613237565b90506131fd846005015482612100565b6005850155612edf846133ad565b6000818484111561322f5760405162461bcd60e51b815260040161080091906143a9565b505050900390565b600061093d600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561328a57600080fd5b505afa15801561329e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132c291908101906138df565b60095461185790859063ffffffff61294e16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d2987878760405161333593929190614372565b60405180910390a4831561337c576001810154613358908463ffffffff612a6d16565b60018201556002810154613372908363ffffffff612a6d16565b60028201556133a4565b61338a816001015484612100565b6001820155600281015461339e9083612100565b60028201555b50505050505050565b60006133bc82600501546125ed565b90508160040154810382600201541115610d525760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061346557805160ff1916838001178555613492565b82800160010185558215613492579182015b82811115613492578251825591602001919060010190613477565b50610bfb9291506135ff565b8280548282559060005260206000209081019282156134f3579160200282015b828111156134f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906134be565b50610bfb929150613619565b8280548282559060005260206000209060070160089004810192821561359e5791602002820160005b8382111561356c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613528565b801561359c5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261356c565b505b50610bfb92915061363d565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095091905b80821115610bfb5760008155600101613605565b61095091905b80821115610bfb5780546001600160a01b031916815560010161361f565b61095091905b80821115610bfb57805463ffffffff19168155600101613643565b803561093d81614707565b805161093d81614707565b60008083601f84011261368657600080fd5b50813567ffffffffffffffff81111561369e57600080fd5b6020830191508360208202830111156136b657600080fd5b9250929050565b803561093d8161471b565b805161093d8161471b565b805161093d81614724565b803561093d8161472d565b600082601f8301126136fa57600080fd5b813561370d6137088261464f565b614628565b9150808252602083016020830185838301111561372957600080fd5b6137348382846146c5565b50505092915050565b803561093d81614724565b60006020828403121561375a57600080fd5b60006119c4848461365e565b60006020828403121561377857600080fd5b60006119c48484613669565b6000806040838503121561379757600080fd5b60006137a3858561365e565b92505060206137b48582860161365e565b9150509250929050565b6000806000606084860312156137d357600080fd5b60006137df868661365e565b93505060206137f08682870161365e565b92505060406138018682870161373d565b9150509250925092565b6000806040838503121561381e57600080fd5b600061382a858561365e565b92505060206137b48582860161373d565b60008060008060006060868803121561385357600080fd5b853567ffffffffffffffff81111561386a57600080fd5b61387688828901613674565b9550955050602086013567ffffffffffffffff81111561389557600080fd5b6138a188828901613674565b935093505060406138b4888289016136bd565b9150509295509295909350565b6000602082840312156138d357600080fd5b60006119c484846136c8565b6000602082840312156138f157600080fd5b60006119c484846136d3565b6000806000806080858703121561391357600080fd5b600061391f87876136de565b945050602085013567ffffffffffffffff81111561393c57600080fd5b613948878288016136e9565b935050604085013567ffffffffffffffff81111561396557600080fd5b613971878288016136e9565b92505060606139828782880161373d565b91505092959194509250565b6000602082840312156139a057600080fd5b60006119c4848461373d565b6000806000806000606086880312156139c457600080fd5b60006139d0888861373d565b955050602086013567ffffffffffffffff8111156139ed57600080fd5b6139f988828901613674565b9450945050604086013567ffffffffffffffff811115613a1857600080fd5b613a2488828901613674565b92509250509295509295909350565b60008060408385031215613a4657600080fd5b600061382a858561373d565b60008060408385031215613a6557600080fd5b6000613a7185856136d3565b92505060206137b4858286016136d3565b6000613a8e8383613ab1565b505060200190565b6000613a8e83836142ca565b613aab816146ba565b82525050565b613aab8161468a565b6000613ac58261467d565b613acf8185614681565b9350613ada83614677565b8060005b83811015613b08578151613af28882613a82565b9750613afd83614677565b925050600101613ade565b509495945050505050565b6000613b1e8261467d565b613b288185614681565b9350613b3383614677565b8060005b83811015613b08578151613b4b8882613a96565b9750613b5683614677565b925050600101613b37565b613aab81614695565b613aab81610950565b613aab8161469a565b6000613b878261467d565b613b918185614681565b9350613ba18185602086016146d1565b613baa816146fd565b9093019392505050565b6000613bc1601583614681565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613bf2602183614681565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613c35600e83614681565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613c5f602683614681565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613ca7602083614681565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613ce0600e83614681565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d0a601b83614681565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613d43602883614681565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613d8d601483614681565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613dbd602983614681565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e08602e83614681565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613e58601883614681565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613e91601c83614681565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613eca603283614681565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f1e601583614681565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613f4f602183614681565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613f92602083614681565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613fcb601e83614681565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614004601c83614681565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b600061403d601483614681565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b600061406d603283614681565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006140c1603383614681565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614116602f83614681565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b6000614167601f83614681565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b60006141a0602383614681565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906141ea8482613b6a565b5060208201516141fd6020850182613b6a565b5060408201516142106040850182613b6a565b5060608201516142236060850182613b6a565b5060808201516142366080850182613b6a565b5060a082015161424960a0850182613b6a565b5060c082015161425c60c0850182613b6a565b5060e0820151611b6f60e0850182613b6a565b805160408301906142808482613b6a565b506020820151611b6f6020850182613b6a565b805160608301906142a48482613b6a565b5060208201516142b76020850182613b6a565b506040820151611b6f6040850182613b6a565b613aab816146b1565b6020810161093d8284613ab1565b604081016142ef8285613aa2565b6112096020830184613ab1565b6060810161430a8286613aa2565b6143176020830185613ab1565b6119c46040830184613b6a565b604081016143328285613ab1565b6112096020830184613b6a565b604080825281016143508185613aba565b905081810360208301526119c48184613b13565b6020810161093d8284613b61565b606081016143808286613b61565b6143176020830185613b6a565b6020810161093d8284613b6a565b6020810161093d8284613b73565b602080825281016112098184613b7c565b6020808252810161093d81613bb4565b6020808252810161093d81613be5565b6020808252810161093d81613c28565b6020808252810161093d81613c52565b6020808252810161093d81613c9a565b6020808252810161093d81613cd3565b6020808252810161093d81613cfd565b6020808252810161093d81613d36565b6020808252810161093d81613d80565b6020808252810161093d81613db0565b6020808252810161093d81613dfb565b6020808252810161093d81613e4b565b6020808252810161093d81613e84565b6020808252810161093d81613ebd565b6020808252810161093d81613f11565b6020808252810161093d81613f42565b6020808252810161093d81613f85565b6020808252810161093d81613fbe565b6020808252810161093d81613ff7565b6020808252810161093d81614030565b6020808252810161093d81614060565b6020808252810161093d816140b4565b6020808252810161093d81614109565b6020808252810161093d8161415a565b6020808252810161093d81614193565b610100810161093d82846141d8565b6040810161093d828461426f565b6060810161093d8284614293565b606081016145838286613b6a565b81810360208301526145958185613aba565b905081810360408301526145a98184613b13565b95945050505050565b604081016143328285613b6a565b606081016143808286613b6a565b60a081016145dc8288613b6a565b6145e96020830187613b6a565b6145f66040830186613b6a565b6146036060830185613b6a565b6146106080830184613b6a565b9695505050505050565b6020810161093d82846142ca565b60405181810167ffffffffffffffff8111828210171561464757600080fd5b604052919050565b600067ffffffffffffffff82111561466657600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061093d826146a5565b151590565b600061093d8261468a565b6001600160a01b031690565b63ffffffff1690565b600061093d8261469a565b82818337506000910152565b60005b838110156146ec5781810151838201526020016146d4565b83811115611b6f5750506000910152565b601f01601f191690565b6147108161468a565b811461198a57600080fd5b61471081614695565b61471081610950565b6147108161469a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820793f9efa8f8cf0a426899d6516f9385e6113e99dd5393e43645dd9e59bcff1a26c6578706572696d656e74616cf564736f6c634300050c0040",
  "sourceMap": "149:3348:25:-;;;;;358:6:16;:19;;-1:-1:-1;;;;;;358:19:16;367:10;358:19;;;;-1:-1:-1;;;;;425:6:16;;392:40;;358:6;;392:40;149:3348:25;;;;;;",
  "deployedSourceMap": "149:3348:25:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;149:3348:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7796:266:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1129:67;;;:::i;:::-;;;;;;;;8901:312;;;;;;;;;:::i;:::-;;;;;;;;;;882:18:20;;;:::i;:::-;;;;;;;;3687:232:19;;;;;;;;;:::i;16132:135::-;;;:::i;:::-;;;;;;;;10282:194;;;;;;;;;:::i;683:23:20:-;;;:::i;1164:26::-;;;:::i;9266:203:19:-;;;;;;;;;:::i;:::-;;;;;;;;;1320:51;;;:::i;:::-;;;;;;;;5440:281;;;;;;;;;:::i;11394:1329::-;;;;;;;;;:::i;:::-;;;;;;;;8495:186;;;;;;;;;:::i;7191:206::-;;;:::i;1066:23:20:-;;;:::i;1202:57:19:-;;;:::i;6043:278::-;;;;;;;;;:::i;8739:104::-;;;:::i;16615:148::-;;;;;;;;;:::i;:::-;;16322:236;;;;;;;;;:::i;1899:58:20:-;;;;;;;;;:::i;1512:844:19:-;;;;;;;;;:::i;12777:377::-;;;;;;;;;:::i;:::-;;;;;;;;698:157:17;;;:::i;1233:30:20:-;;;:::i;:::-;;;;;;;;8114:329:19;;;;;;;;;:::i;1816:43:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;;;1661:73;;;;;;;;;:::i;200:3295:25:-;;;:::i;11000:336:19:-;;;:::i;:::-;;;;;;;;2480:113;;;;;;;;;:::i;1300:137:16:-;;;:::i;1435:39:20:-;;;:::i;10536:213:19:-;;;;;;;;;:::i;4847:283::-;;;;;;;;;:::i;515:77:16:-;;;:::i;866:90::-;;;:::i;972:20:20:-;;;:::i;5807:174:19:-;;;;;;;;;:::i;4524:265::-;;;;;;;;;:::i;4179:291::-;;;;;;;;;:::i;656:21:20:-;;;:::i;6393:390:19:-;;;;;;;;;:::i;784:28:20:-;;;:::i;1550:40::-;;;:::i;10803:137:19:-;;;;;;;;;:::i;7457:276::-;;;;;;;;;:::i;13690:2387::-;;;;;;;;;:::i;13389:234::-;;;:::i;:::-;;;;;;;;;6925:214;;;;;;;;;:::i;2871:169::-;;;;;;;;;:::i;1377:51::-;;;:::i;1993:50:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;1586:107:16;;;;;;;;;:::i;1299:19:20:-;;;:::i;9971:254:19:-;;;;;;;;;:::i;7796:266::-;545:1:22;528:18;;;;;;;;7899:4:19;;7933:10;7953:24;7933:10;7953:19;:24::i;:::-;-1:-1:-1;;;;;8012:13:19;;;;;;:8;:13;;;;;:21;;;7987:47;;8002:8;;7987:14;:47::i;:::-;8051:4;8044:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;;;;;;;;;7796:266:19;;;;:::o;1129:67::-;1192:4;1129:67;:::o;8901:312::-;-1:-1:-1;;;;;9129:15:19;;9001:13;9129:15;;;:8;:15;;;;;:21;9028:27;;9188:18;9129:21;9188:11;:18::i;:::-;8901:312;;9160:46;;-1:-1:-1;8901:312:19;-1:-1:-1;;8901:312:19:o;882:18:20:-;;;;;;;;;;;;;;-1:-1:-1;;882:18:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3687:232:19:-;3785:10;3755:4;3805:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;3805:32:19;;;;;;;;;;:41;;;3861:30;3755:4;;3785:10;;;3861:30;;;;3840:6;;3861:30;;;;;;;;;;3908:4;3901:11;;;3687:232;;;;;:::o;16132:135::-;16256:3;;-1:-1:-1;;;;;16256:3:19;16132:135;;:::o;10282:194::-;-1:-1:-1;;;;;10424:15:19;;10368:14;10424:15;;;:8;:15;;;;;10456:13;;;10282:194;;;;:::o;683:23:20:-;;;-1:-1:-1;;;683:23:20;;;;;:::o;1164:26::-;;;;:::o;9266:203:19:-;9348:27;9377;9444:18;9456:5;9444:11;:18::i;:::-;9416:46;;;;-1:-1:-1;9266:203:19;-1:-1:-1;;9266:203:19:o;1320:51::-;1361:10;1320:51;:::o;5440:281::-;545:1:22;528:18;;;;;;;;5559:4:19;;5579:24;5599:3;5579:19;:24::i;:::-;5613:46;5630:10;5642:3;5647;5652:6;5613:16;:46::i;:::-;5669:24;5689:3;5669:19;:24::i;:::-;5710:4;5703:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;5440:281:19;;;;;;:::o;11394:1329::-;11481:29;;:::i;:::-;-1:-1:-1;;;;;11552:15:19;;11526:23;11552:15;;;:8;:15;;;;;;;;;11591:13;;11577:27;;11630:15;;;;11614:13;;;:31;;;;11673:17;;;;11655:15;;;:35;;;;11714:13;;;;11700:11;;;:27;11761:23;;;;11737:21;;;:47;11820:29;11552:15;11820:20;:29::i;:::-;11795:22;;;:54;-1:-1:-1;;;;;11901:19:19;;11860:38;11901:19;;;:12;:19;;;;;11957:30;;11930:24;;;:57;12021:13;;11901:19;;11860:38;12016:4;;-1:-1:-1;;12021:28:19;:72;;12080:13;;12021:72;;;12064:1;12021:72;12016:78;;;;;;;;;;;;;;;;;;11998:96;;12108:7;:13;;;12125:1;12108:18;:50;;;-1:-1:-1;12130:13:19;;-1:-1:-1;;12130:28:19;12108:50;12104:590;;;12464:41;12474:5;:13;;;12489:5;:15;;;12464:9;:41::i;:::-;12441:20;;;:64;12104:590;;;12541:9;12536:148;12560:15;;;:22;12556:26;;12536:148;;;12631:7;:19;;:38;12651:3;:14;;12666:1;12651:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12651:17:19;12631:38;;;;;;;;;;;;;12607:20;;;:62;;;;;;;12651:17;12584:3;12536:148;;;;12104:590;-1:-1:-1;;;11394:1329:19;;;:::o;8495:186::-;545:1:22;528:18;;;;;;;;8560:4:19;;8576:36;8594:10;8606:5;8576:17;:36::i;:::-;8622:31;8642:10;8622:19;:31::i;:::-;8670:4;8663:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;7191:206:19;545:1:22;528:18;;;;;;;;7243:4:19;;7273:10;7293:24;7273:10;7293:19;:24::i;:::-;-1:-1:-1;;;;;7347:13:19;;;;;;:8;:13;;;;;:21;;;7327:42;;7342:3;;7327:14;:42::i;:::-;7386:4;7379:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;7191:206:19;;:::o;1066:23:20:-;;;;:::o;1202:57:19:-;-1:-1:-1;;1202:57:19;:::o;6043:278::-;545:1:22;528:18;;;;;;;;6162:4:19;;6182:36;6200:10;6212:5;6182:17;:36::i;:::-;6228:24;6241:10;6228:12;:24::i;:::-;6262:31;6282:10;6262:19;:31::i;:::-;6310:4;6303:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;6043:278:19;;;;;:::o;8739:104::-;8821:4;:11;-1:-1:-1;;8821:15:19;8739:104;:::o;16615:148::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;292:11:15;;-1:-1:-1;;;292:11:15;;;;:19;;307:4;292:19;271:117;;;;-1:-1:-1;;;271:117:15;;;;;;;;;16695:26:19;16713:7;16695:17;:26::i;:::-;16736:20;16748:7;16736:20;;;;;;;;;;;;;;;16615:148;:::o;16322:236::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;16421:28:19;16433:15;16421:11;:28::i;:::-;16413:87;;;;-1:-1:-1;;;16413:87:19;;;;;;;;;16510:41;16528:15;16545:5;16510:17;:41::i;:::-;16322:236;;:::o;1899:58:20:-;;;;;;;;;;;;;:::o;1512:844:19:-;1694:11;;-1:-1:-1;;;1694:11:19;;;;1693:12;1685:66;;;;-1:-1:-1;;;1685:66:19;;;;;;;;;1761:24;:22;:24::i;:::-;1795:6;:19;;-1:-1:-1;;;;;;1795:19:19;1804:10;1795:19;;;;1824:17;;1851:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;1873:16:19;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;1899:8:19;:20;;;1192:4;1929:25;:64;2003:3;:24;;-1:-1:-1;;;;;;2003:24:19;-1:-1:-1;;;;;2003:24:19;;;;;;;;;;;2052:16;;;-1:-1:-1;;;2052:16:19;;;;:3;;;;;:14;;:16;;;;;;;;;;;;:3;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;2052:16:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2052:16:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2052:16:19;;;;;;;;;2037:5;:32;;-1:-1:-1;;;;;2037:32:19;;;;-1:-1:-1;;;;;;2037:32:19;;;;;;;;;2139:38;;;-1:-1:-1;2139:38:19;;;2143:16;;;;;;;;2139:38;;2161:15;;;;;2139:38;2161:15;;;;;;2139:38;;;;2129:4;27:10:-1;;-1:-1;23:18;;45:23;;;2129:49:19;;;;;;;;23:18:-1;;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2233:11:19;;;-1:-1:-1;;2233:8:19;:11;;-1:-1:-1;;2233:11:19;:34;2317:3;;2323:25;;2233:11;2283:66;;;;;-1:-1:-1;;;;;2317:3:19;;;;2283:66;;;;;;;;;;1512:844;;;;:::o;12777:377::-;12860:25;;:::i;:::-;12897:34;12934:15;;;:8;:15;;;;;;;;12976:20;;12959:37;;13025:22;;;;13006:16;;;:41;;;;13092:32;;;;13079:46;;:12;:46::i;:::-;13058:18;;;:67;-1:-1:-1;12777:377:19;;;:::o;698:157:17:-;782:66;698:157;:::o;1233:30:20:-;;;-1:-1:-1;;;;;1233:30:20;;:::o;8114:329:19:-;545:1:22;528:18;;;;;;;;8307:42:19;;;;;;;;;;;;;;;;;;8274:13;;528:18:22;8307:42:19;;;8325:10;;;;;;8307:42;;;;8325:10;;8307:42;8325:10;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;8307:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8337:11:19;;-1:-1:-1;8337:11:19;;;;8307:42;;;8337:11;;8307:42;8337:11;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;8307:17:19;;-1:-1:-1;;;8307:42:19:i;:::-;8299:50;;8363:11;8359:78;;;8390:36;8408:10;8420:5;8390:17;:36::i;:::-;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;8114:329:19;;;;;;;;:::o;1816:43:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1661:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;200:3295:25:-;3374:13;242:12;3424:64;;11000:336:19;11049:18;;:::i;:::-;11079:26;11137:38;11150:24;;11137:12;:38::i;:::-;11204:125;;;;;;;;;11247:11;;11204:125;;11115:60;;11204:125;;;;;-1:-1:-1;11000:336:19;:::o;2480:113::-;-1:-1:-1;;;;;2563:15:19;2537:7;2563:15;;;:8;:15;;;;;:23;;;;2480:113::o;1300:137:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1398:1;1382:6;;1361:40;;-1:-1:-1;;;;;1382:6:16;;;;1361:40;;1398:1;;1361:40;1428:1;1411:19;;-1:-1:-1;;;;;;1411:19:16;;;1300:137::o;1435:39:20:-;;;;:::o;10536:213:19:-;-1:-1:-1;;;;;10681:15:19;;10625:14;10681:15;;;:8;:15;;;;;10713:29;10681:15;10713:20;:29::i;:::-;10706:36;10536:213;-1:-1:-1;;;10536:213:19:o;4847:283::-;545:1:22;528:18;;;;;;;;4953:4:19;;4973:24;4993:3;4973:19;:24::i;:::-;-1:-1:-1;;;;;5046:13:19;;;;;;:8;:13;;;;;:21;;;5007:61;;5024:10;;5036:3;;5041;;5007:16;:61::i;:::-;5078:24;5098:3;5078:19;:24::i;515:77:16:-;553:7;579:6;-1:-1:-1;;;;;579:6:16;515:77;:::o;866:90::-;906:4;943:6;-1:-1:-1;;;;;943:6:16;929:10;:20;;866:90::o;972:20:20:-;;;;;;;;;;;;;;;-1:-1:-1;;972:20:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5807:174:19;545:1:22;528:18;;;;;;;;5872:4:19;;5888:24;5901:10;5888:12;:24::i;4524:265::-;545:1:22;528:18;;;;;;;;4589:4:19;;4619:10;4639:24;4619:10;4639:19;:24::i;:::-;-1:-1:-1;;;;;4705:13:19;;;;;;:8;:13;;;;;:21;;;4673:54;;4690:3;;;;4700;;4673:16;:54::i;:::-;4737:24;4757:3;4737:19;:24::i;4179:291::-;545:1:22;528:18;;;;;;;;4281:4:19;;4315:10;4335:24;4315:10;4335:19;:24::i;:::-;4369:39;4386:3;4391;4396;4401:6;4369:16;:39::i;:::-;4418:24;4438:3;4418:19;:24::i;:::-;4459:4;4452:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;656:21:20;;;-1:-1:-1;;;;;656:21:20;;:::o;6393:390:19:-;545:1:22;528:18;;;;;;;;6592:42:19;;;;;;;;;;;;;;;;;;6560:4;;528:18:22;6560:4:19;;6592:42;;;;6610:10;;;;;;6592:42;;;6610:10;;6592:42;6610:10;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6592:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6622:11:19;;-1:-1:-1;6622:11:19;;;;6592:42;;;6622:11;;6592:42;6622:11;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6592:17:19;;-1:-1:-1;;;6592:42:19:i;:::-;6576:58;;6644:36;6662:10;6674:5;6644:17;:36::i;:::-;6690:24;6703:10;6690:12;:24::i;:::-;6724:31;6744:10;6724:19;:31::i;:::-;6772:4;6765:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;784:28:20;;;;:::o;1550:40::-;;;;:::o;10803:137:19:-;545:1:22;528:18;;;;;;;;10870:4:19;;10886:26;10906:5;10886:19;:26::i;7457:276::-;545:1:22;528:18;;;;;;;;7579:4:19;;7613:10;7633:24;7613:10;7633:19;:24::i;:::-;7667:38;7682:8;7692:12;7667:14;:38::i;13690:2387::-;545:1:22;528:18;;;;;;;;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;13978:5:19;;13935:31;;;-1:-1:-1;;;13935:31:19;;;;13884:19;;-1:-1:-1;;;;;13978:5:19;;;;13935:29;;;;;;:31;;;;;;;;;;;;;;;:29;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;13935:31:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13935:31:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13935:31:19;;;;;;;;;-1:-1:-1;;;;;13935:49:19;;13914:146;;;;-1:-1:-1;;;13914:146:19;;;;;;;;;14099:3;;;-1:-1:-1;;;;;14112:24:19;;;-1:-1:-1;;;;;;14112:24:19;;;;;;14227:18;;;-1:-1:-1;;;14227:18:19;;;;14099:3;;;;;14070:26;;14099:3;;14227:16;;:18;;;;;;;;;;14070:26;14099:3;14227:18;;;5:2:-1;;;;30:1;27;20:12;5:2;14227:18:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14227:18:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14227:18:19;;;;;;;;;-1:-1:-1;14277:5:19;;:30;;-1:-1:-1;;;14277:30:19;;14197:48;;-1:-1:-1;14255:19:19;;-1:-1:-1;;;;;14277:5:19;;;;:15;;:30;;14301:4;;14277:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14277:30:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14277:30:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14277:30:19;;;;;;;;;14376:5;;14398:3;;14376:40;;-1:-1:-1;;;14376:40:19;;14255:52;;-1:-1:-1;;;;;;14376:5:19;;;;:13;;:40;;14398:3;;14255:52;;14376:40;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14376:40:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14376:40:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14376:40:19;;;;;;;;;14368:73;;;;-1:-1:-1;;;14368:73:19;;;;;;;;;14478:3;;:33;;-1:-1:-1;;;14478:33:19;;14451:24;;-1:-1:-1;;;;;14478:3:19;;:20;;:33;;14499:11;;14478:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14478:33:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14478:33:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14478:33:19;;;;;;;;;14964:3;;14451:60;;-1:-1:-1;;;;;;14956:31:19;;;14964:3;;14956:31;14952:122;;15019:6;-1:-1:-1;;;;;15003:42:19;;15054:7;:5;:7::i;:::-;15003:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15003:60:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15003:60:19;;;;14952:122;15626:23;15652:46;15673:24;;15652:20;:46::i;:::-;15747:25;;15626:72;;-1:-1:-1;15810:97:19;15890:16;15810:62;:15;15747:25;15810:62;:32;:62;:::i;:::-;:79;:97;:79;:97;:::i;:::-;15782:25;:125;15944:37;15965:15;15944:20;:37::i;:::-;15917:24;:64;16044:25;;15997:73;;;;;;16023:19;;16044:25;15997:73;;;;;;;;;;775:1:16;;;;;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;13389:234:19;13543:24;;13469:15;;13587:29;13543:24;13587:12;:29::i;:::-;13577:39;;13389:234;;:::o;6925:214::-;545:1:22;528:18;;;;;;;;6994:4:19;;7024:10;7044:24;7024:10;7044:19;:24::i;:::-;7078:33;7093:3;7098:12;7078:14;:33::i;2871:169::-;-1:-1:-1;;;;;2999:25:19;;;2969:7;2999:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;2871:169::o;1377:51::-;1426:2;1377:51;:::o;1993:50:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1586:107:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1658:28;1677:8;1658:18;:28::i;:::-;1586:107;:::o;1299:19:20:-;;;-1:-1:-1;;;;;1299:19:20;;:::o;9971:254:19:-;-1:-1:-1;;;;;10116:15:19;;10060:14;10116:15;;;:8;:15;;;;;10171:23;;;;10060:14;;10158:37;;:12;:37::i;:::-;10141:54;9971:254;-1:-1:-1;;;;9971:254:19:o;32554:781::-;-1:-1:-1;;;;;32643:15:19;;;32617:23;32643:15;;;:8;:15;;;;;;;;32703:12;:19;;;;;32741:3;;:20;;-1:-1:-1;;;32741:20:19;;;;32643:15;;32703:19;;32741:3;;;:18;;:20;;;;;32643:15;;32741:20;;;;;;;;:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;32741:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32741:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32741:20:19;;;;;;;;;32733:54;;;;-1:-1:-1;;;32733:54:19;;;;;;;;;32797:22;32822:29;32843:7;32822:20;:29::i;:::-;32797:54;-1:-1:-1;32866:18:19;;32862:467;;32927:41;;:78;;32990:14;32927:78;:62;:78;:::i;:::-;32900:105;;33039:17;;;;:37;;33061:14;33039:37;:21;:37;:::i;:::-;33019:17;;;:57;33108:15;;;;:35;;33128:14;33108:35;:19;:35;:::i;:::-;33090:15;;;:53;33171:11;;:31;;33187:14;33171:31;:15;:31;:::i;:::-;33157:11;:45;33221:35;;-1:-1:-1;;;;;33221:35:19;;;;;;;33241:14;;33221:35;;;;;;;;;;33296:5;-1:-1:-1;;;;;33275:43:19;33292:1;-1:-1:-1;;;;;33275:43:19;-1:-1:-1;;;;;;;;;;;33303:14:19;33275:43;;;;;;;;;;;;;;;32862:467;32554:781;;;;:::o;20586:733::-;20704:10;20669:23;20695:20;;;:8;:20;;;;;20733:16;20725:57;;;;-1:-1:-1;;;20725:57:19;;;;;;;;;20829:7;:15;;;20813:12;:31;;20792:106;;;;-1:-1:-1;;;20792:106:19;;;;;;;;;20909:49;20933:10;20945:12;20909:23;:49::i;:::-;21046:15;;;;:33;;21066:12;21046:33;:19;:33;:::i;:::-;21028:15;;;:51;21103:11;;:29;;21119:12;21103:29;:15;:29;:::i;:::-;21089:11;:43;21186:5;;:38;;-1:-1:-1;;;21186:38:19;;-1:-1:-1;;;;;21186:5:19;;;;:14;;:38;;21201:8;;21211:12;;21186:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21186:38:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21186:38:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21186:38:19;;;;;;;;;21178:72;;;;-1:-1:-1;;;21178:72:19;;;;;;;;;21266:46;;21295:1;;21275:10;;-1:-1:-1;;;;;;;;;;;21266:46:19;;;21299:12;;21266:46;;;;;;;;;;20586:733;;;:::o;9475:436::-;9557:27;;9629:10;;;;;:34;;;-1:-1:-1;;9643:5:19;:20;;9629:34;9625:280;;;9679:14;;:::i;:::-;9696:4;9701:5;9696:11;;;;;;;;;;;;;;;;;;9679:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9679:28:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9734:3;:14;;;9721:27;;9776:3;:15;;;9762:29;;9625:280;;;;-1:-1:-1;;9835:16:19;;;9849:1;9835:16;;;;;;9879:15;;;;;;;;;9835:16;9625:280;9475:436;;;:::o;17212:1755::-;17369:3;-1:-1:-1;;;;;17362:10:19;:3;-1:-1:-1;;;;;17362:10:19;;;17354:47;;;;-1:-1:-1;;;17354:47:19;;;;;;;;;-1:-1:-1;;;;;17433:13:19;;;;;;:8;:13;;;;;:21;;;:31;-1:-1:-1;17433:31:19;17412:108;;;;-1:-1:-1;;;17412:108:19;;;;;;;;;17595:25;-1:-1:-1;;;;;17638:14:19;;;;;;;17634:159;;;-1:-1:-1;;;17634:159:19;;;-1:-1:-1;;;;;;17750:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;17634:159;17844:6;17823:17;:27;;17802:107;;;;-1:-1:-1;;;17802:107:19;;;;;;;;;17985:20;18008:29;:17;18030:6;18008:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;18070:13:19;;18047:20;18070:13;;;:8;:13;;;;;:21;;;17985:52;;-1:-1:-1;18047:20:19;18070:33;;18096:6;18070:33;:25;:33;:::i;:::-;-1:-1:-1;;;;;18136:13:19;;18113:20;18136:13;;;:8;:13;;;;;:21;;;18047:56;;-1:-1:-1;18113:20:19;18136:33;;18162:6;18136:33;:25;:33;:::i;:::-;18113:56;;-1:-1:-1;;18239:17:19;:32;18235:110;;-1:-1:-1;;;;;18287:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;18235:110;18390:26;18419:38;18445:3;18450:6;18419:25;:38::i;:::-;18390:67;;18467:48;18483:3;18488:6;18496:18;18467:15;:48::i;:::-;-1:-1:-1;;;;;18559:13:19;;;;;;;:8;:13;;;;;;:21;;;;:36;;;18605:13;;;;;;;;:21;;;:36;;;18695:13;:19;:24;;;;:64;;-1:-1:-1;;;;;;18735:13:19;;;;;;:8;:13;;;;;:19;:24;18695:64;:114;;;;-1:-1:-1;;;;;;18775:13:19;;;;;;:8;:13;;;;;:19;-1:-1:-1;;18775:34:19;;18695:114;18690:190;;;-1:-1:-1;;;;;18849:13:19;;;;;;:8;:13;;;;;:19;18826:43;;18844:3;;18826:17;:43::i;:::-;18948:3;-1:-1:-1;;;;;18934:26:19;18943:3;-1:-1:-1;;;;;18934:26:19;-1:-1:-1;;;;;;;;;;;18953:6:19;18934:26;;;;;;;;;;;;;;;17212:1755;;;;;;;;;:::o;23968:518::-;24070:7;24093:14;24110:37;24123:7;:23;;;24110:12;:37::i;:::-;24093:54;;24171:36;24189:7;:17;;;24171:7;:13;;;:17;;:36;;;;:::i;:::-;24161:6;:47;24157:323;;;24337:7;:17;;;24321:7;:13;;;24312:6;:22;:42;24305:49;;;;;24157:323;24468:1;24461:8;;;;;34616:135;34679:7;34706:1;34702;:5;34698:46;;;-1:-1:-1;34716:1:19;34709:8;;34698:46;-1:-1:-1;34739:5:19;;;34732:12;;23109:789;-1:-1:-1;;23193:5:19;:20;:43;;;-1:-1:-1;23225:4:19;:11;23217:19;;23193:43;23185:70;;;;-1:-1:-1;;;23185:70:19;;;;;;;;;-1:-1:-1;;;;;23291:15:19;;23265:23;23291:15;;;:8;:15;;;;;;;;23335:13;;23395:18;;;:8;:18;;;;;;23460:15;;;;;;;23489;;;;:19;23485:288;;23524:26;23553:49;23579:5;23586:7;:15;;;23553:25;:49::i;:::-;23616:21;;;23674:15;;;;23524:78;;-1:-1:-1;23651:59:19;;23667:5;;23524:78;23651:15;:59::i;:::-;23485:288;;;;23741:21;;;23485:288;23782:25;;-1:-1:-1;;23782:25:19;;;23817;;23806:1;23817:25;;;23857:34;;23885:5;;23875:8;;-1:-1:-1;;;;;23857:34:19;;;;;23782:20;;23857:34;23109:789;;;;;;:::o;19197:1069::-;19279:5;;:42;;-1:-1:-1;;;19279:42:19;;19325:10;;-1:-1:-1;;;;;19279:5:19;;:15;;:42;;19295:10;;19315:4;;19279:42;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19279:42:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19279:42:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19279:42:19;;;;;;;;;:56;;19258:123;;;;-1:-1:-1;;;19258:123:19;;;;;;;;;19427:10;19392:23;19418:20;;;:8;:20;;;;;;;19489:5;;:57;;-1:-1:-1;;;19489:57:19;;19418:20;;-1:-1:-1;;;;;19489:5:19;;;;:18;;:57;;19427:10;19528:4;;19535:10;;19489:57;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19489:57:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19489:57:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19489:57:19;;;;;;;;;19481:91;;;;-1:-1:-1;;;19481:91:19;;;;;;;;;19590:5;;19612:3;;19590:39;;-1:-1:-1;;;19590:39:19;;-1:-1:-1;;;;;19590:5:19;;;;:13;;:39;;19612:3;;;19618:10;;19590:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19590:39:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19590:39:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19590:39:19;;;;;;;;;19582:72;;;;-1:-1:-1;;;19582:72:19;;;;;;;;;19691:3;;:32;;-1:-1:-1;;;19691:32:19;;19664:24;;-1:-1:-1;;;;;19691:3:19;;:20;;:32;;19712:10;;19691:32;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19691:32:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19691:32:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19691:32:19;;;;;;;;;19796:11;;19664:59;;-1:-1:-1;19796:27:19;;19812:10;19796:27;:15;:27;:::i;:::-;19782:11;:41;19851:15;;;;:31;;19871:10;19851:31;:19;:31;:::i;:::-;19833:15;;;:49;19951:24;;:46;;19980:16;19951:46;:28;:46;:::i;:::-;19924:24;:73;20067:24;20094:38;20115:16;20094:20;:38::i;:::-;20067:65;;20142:57;20158:10;20170;20182:16;20142:15;:57::i;:::-;20215:44;;20236:10;;20232:1;;-1:-1:-1;;;;;;;;;;;20215:44:19;;;20248:10;;20215:44;;180:513:17;410:10;-1:-1:-1;;;;;400:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;400:37:17;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;400:37:17;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;400:37:17;;;;;;;;;296:66;267:170;246:231;;;;-1:-1:-1;;;246:231:17;;;;;;;;;569:66;545:132;496:191::o;34229:155:19:-;34336:17;34369:8;;;34229:155::o;411:66:15:-;452:11;:18;;-1:-1:-1;;;;452:18:15;-1:-1:-1;;;452:18:15;;;411:66::o;34823:605:19:-;34908:15;35319:102;35395:25;;35319:58;35352:3;;;;;;;;;-1:-1:-1;;;;;35352:3:19;-1:-1:-1;;;;;35352:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35352:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35352:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35352:24:19;;;;;;;;;35319:15;;:58;:32;:58;:::i;21511:1465::-;21636:13;21661:9;21709:1;21689:10;:17;:21;21681:69;;;;-1:-1:-1;;;21681:69:19;;;;;;;;;1426:2;21768:10;:17;:43;;21760:106;;;;-1:-1:-1;;;21760:106:19;;;;;;;;;21918:11;:18;21897:10;:17;:39;21876:118;;;;-1:-1:-1;;;21876:118:19;;;;;;;;;-1:-1:-1;22153:24:19;;22191:400;22207:10;:17;22203:1;:21;22191:400;;;22287:1;22270:11;22282:1;22270:14;;;;;;;;;;;;;;:18;;;22245:124;;;;-1:-1:-1;;;22245:124:19;;;;;;;;;22416:1;-1:-1:-1;;;;;22391:27:19;:10;22402:1;22391:13;;;;;;;;;;;;;;-1:-1:-1;;;;;22391:27:19;;;22383:80;;;;-1:-1:-1;;;22383:80:19;;;;;;;;;22565:11;22577:1;22565:14;;;;;;;;;;;;;;22557:23;;22537:43;;;;22226:3;;;;;22191:400;;;22609:1;22605:5;;22600:276;22616:11;:18;22612:1;:22;22600:276;;;22835:16;1361:10;22787:24;;22769:11;22781:1;22769:14;;;;;;;;;;;;;;22761:23;;:50;22760:91;;;;;;22655:11;22667:1;22655:14;;;;;;;;;;;;;:210;;;;;;;;;;;22636:3;;;;;22600:276;;;22904:28;;;;;;;;;;;;;;;;;;;22894:4;27:10:-1;;22936:1:19;23:18:-1;;;45:23;;;-1:-1;22894:39:19;;;;;;;;22936:1;;23:18:-1;;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;;;;:43;22886:51;;22963:5;22952:17;;;;;;;;;;21511:1465;;;;;;:::o;35792:247::-;35874:23;35916:116;1119:4;35916:58;35949:3;;;;;;;;;-1:-1:-1;;;;;35949:3:19;-1:-1:-1;;;;;35949:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;36121:311:19;36211:23;36308:117;1119:4;36308:59;36341:25;;36308:15;:32;;:59;;;;:::i;2159:459:33:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:33;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:33;;;;;;;;3073:130;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;36514:311:19:-;36792:25;;36604:23;;36701:117;;:73;:15;1119:4;36701:73;:32;:73;:::i;1794:259:16:-;-1:-1:-1;;;;;1880:22:16;;1859:107;;;;-1:-1:-1;;;1859:107:16;;;;;;;;;2002:6;;;1981:38;;-1:-1:-1;;;;;1981:38:16;;;;2002:6;;;1981:38;;;2029:6;:17;;-1:-1:-1;;;;;;2029:17:16;-1:-1:-1;;;;;2029:17:16;;;;;;;;;;1794:259::o;834:176:33:-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:33;;;;;;;;28480:461:19;28602:3;;:29;;-1:-1:-1;;;28602:29:19;;28576:23;;-1:-1:-1;;;;;28602:3:19;;:20;;:29;;28623:7;;28602:29;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28602:29:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28602:29:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28602:29:19;;;;;;;;;28576:55;;28641:37;28662:15;28641:20;:37::i;:::-;;28688:30;28703:5;28710:7;28688:14;:30::i;:::-;28791:15;28764:24;;:42;28760:175;;;28822:24;:43;;;;;;;28760:175;;;28923:1;28896:24;:28;28760:175;28480:461;;;:::o;1274:134:33:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;27721:341:19:-;27917:3;;:20;;;-1:-1:-1;;;27917:20:19;;;;27814:26;;-1:-1:-1;;;;;27917:3:19;;:18;;:20;;;;;;;;;;;;;;27814:26;27917:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;27917:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27917:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27917:20:19;;;;;;;;;27909:54;;;;-1:-1:-1;;;27909:54:19;;;;;;;;;27994:21;28007:7;27994:12;:21::i;:::-;27973:42;;28025:30;28040:5;28047:7;28025:14;:30::i;25005:2289::-;-1:-1:-1;;;;;25162:15:19;;25136:23;25162:15;;;:8;:15;;;;;25210:13;;25162:15;;25136:23;25205:4;;-1:-1:-1;;25210:28:19;:72;;25269:13;;25210:72;;;25253:1;25210:72;25205:78;;;;;;;;;;;;;;;;;;;;25316:21;;25205:78;;-1:-1:-1;25316:25:19;25312:1976;;-1:-1:-1;25357:13:19;25373:7;25418:15;25447:1487;25463:15;;;:22;25459:26;;25447:1487;;;25510:32;25545:8;:27;25554:3;:14;;25569:1;25554:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25554:17:19;25545:27;;;;;;;;;;;;25554:17;25619:15;;:22;25545:27;;-1:-1:-1;;;25619:26:19;25613:33;;;;25752:117;;1361:10;25818:51;;25819:31;25831:3;:15;;25847:1;25831:18;;;;;;;;;;;;;;;;;;;;;25819:7;;25831:18;;;;;;;;;;;;;25819:11;:31;:::i;:::-;25818:51;;;;;;25752:117;;;25790:5;25752:117;25727:142;;25984:79;26048:14;25984:7;:19;;:38;26004:3;:14;;26019:1;26004:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26004:17:19;25984:38;;;;;;;;;;;;;;:79;:63;:79;:::i;:::-;25943:7;:19;;:38;25963:3;:14;;25978:1;25963:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25963:17:19;25943:38;;;;;;;;;;;;:120;26106:22;;;;:63;;26154:14;26106:63;:47;:63;:::i;:::-;26081:22;;;:88;26242:32;26252:5;26259:14;26242:9;:32::i;:::-;26234:40;;26360:32;26395:15;:133;;1361:10;26469:59;;26470:39;26490:3;:15;;26506:1;26490:18;;;;;;;26470:39;26469:59;;;;;;26395:133;;;26433:13;26395:133;26581:32;;;;26360:168;;-1:-1:-1;26581:83:19;;26360:168;26581:83;:57;:83;:::i;:::-;26546:32;;;:118;26745:50;26755:13;26770:24;26745:9;:50::i;:::-;26729:66;;26814:105;26831:5;26838:3;:14;;26853:1;26838:17;;;;;;;;;;;;;;;;;;26857:13;;-1:-1:-1;;;;;26838:17:19;;;;;26878:14;26894:24;26814:16;:105::i;:::-;25447:1487;;;;25487:3;;;;;25447:1487;;;25312:1976;;;;;27058:13;;;;:26;;27076:7;27058:26;:17;:26;:::i;:::-;27042:13;;;:42;27124:23;;;;:61;;27169:15;27124:61;:44;:61;:::i;:::-;27098:23;;;:87;27231:13;;27200:77;;27217:5;;;;27246:4;27252:7;27261:15;27200:16;:77::i;:::-;25005:2289;;;;;;:::o;3718:338:33:-;3804:7;3904:12;3897:5;3889:28;;;;-1:-1:-1;;;3889:28:33;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:33:o;29126:3326:19:-;-1:-1:-1;;;;;29249:15:19;;29223:23;29249:15;;;:8;:15;;;;;29297:13;;29249:15;;29223:23;29292:4;;-1:-1:-1;;29297:28:19;:72;;29356:13;;29297:72;;;29340:1;29297:72;29292:78;;;;;;;;;;;;;;;;;;29274:96;;29489:21;29513:45;29523:7;:15;;;29540:7;:17;;;29513:9;:45::i;:::-;29489:69;;29644:7;29628:13;:23;29624:77;;;-1:-1:-1;29683:7:19;29624:77;29710:26;29739:27;29752:13;29739:12;:27::i;:::-;29780:21;;29710:56;;-1:-1:-1;29780:25:19;29776:2341;;29973:13;30016:18;29821:13;30048:1586;30064:15;;;:22;30060:26;;30048:1586;;;30111:32;30146:8;:27;30155:3;:14;;30170:1;30155:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30155:17:19;30146:27;;;;;;;;;;;;30155:17;30220:15;;:22;30146:27;;-1:-1:-1;;;30220:26:19;30214:33;;;;30360:123;;1361:10;30426:57;;30427:37;30445:3;:15;;30461:1;30445:18;;;;;;;;;;;;;;;;;;;;;30427:13;;30445:18;;;;;;;;;;;;;30427:17;:37;:::i;:::-;30426:57;;;;;;30360:123;;;30398:5;30360:123;30335:148;;30526:90;30557:16;:22;;;30601:14;30526:9;:90::i;:::-;30501:16;:22;;:115;;;;30675:106;30706:7;:19;;:38;30726:3;:14;;30741:1;30726:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30726:17:19;30706:38;;;;;;;;;;;;;30766:14;30675:9;:106::i;:::-;30634:7;:19;;:38;30654:3;:14;;30669:1;30654:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30654:17:19;30634:38;;;;;;;;;;;;:147;30853:32;30863:5;30870:14;30853:9;:32::i;:::-;30845:40;;30976:32;31011:15;:136;;1361:10;31085:62;;31086:42;31109:3;:15;;31125:1;31109:18;;;;;;;31086:42;31085:62;;;;;;31011:136;;;31049:13;31011:136;30976:171;;31200:110;31231:16;:32;;;31285:24;31200:9;:110::i;:::-;31165:32;;;:145;31392:50;31402:13;31417:24;31392:9;:50::i;:::-;31376:66;;31461:33;31477:16;31461:15;:33::i;:::-;31513:106;31530:5;31537:3;:14;;31552:1;31537:17;;;;;;;;;;;;;;;;;31556:13;;-1:-1:-1;;;;;31537:17:19;;;;31578:14;31594:24;31513:16;:106::i;:::-;30048:1586;;;;30088:3;;;;;30048:1586;;;29776:2341;;;;;;31800:39;31810:7;:13;;;31825;31800:9;:39::i;:::-;31784:13;;;:55;31921:23;;;;31911:54;;31946:18;31911:9;:54::i;:::-;31885:23;;;:80;31980:24;31885:7;31980:15;:24::i;:::-;32019:87;32036:5;32043;32050:7;:13;;;32065:5;32072:13;32087:18;32019:16;:87::i;:::-;32216:13;32206:7;:23;32202:244;;;32266:37;32289:13;32279:7;:23;32266:12;:37::i;:::-;32245:58;;32343:54;32353:7;:23;;;32378:18;32343:9;:54::i;:::-;32317:23;;;:80;32411:24;32317:7;32411:15;:24::i;1732:187:33:-;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:33;;;;;;;;;;-1:-1:-1;;;1888:5:33;;;1732:187::o;35500:220:19:-;35577:23;35619:94;35688:3;;;;;;;;;-1:-1:-1;;;;;35688:3:19;-1:-1:-1;;;;;35688:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35688:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35688:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35688:24:19;;;;;;;;;35644:25;;35619:51;;:7;;:51;:24;:51;:::i;33341:882::-;33555:31;33589:8;:15;33598:5;33589:15;;;;;;;;;;;33555:49;;33655:5;33644:9;-1:-1:-1;;;;;33620:128:19;33637:5;-1:-1:-1;;;;;33620:128:19;;33674:14;33702:16;33732:15;33620:128;;;;;;;;;;;;;;;;;33763:14;33759:458;;;33815:19;;;;:41;;33839:16;33815:41;:23;:41;:::i;:::-;33793:19;;;:63;33902:29;;;;:67;;33953:15;33902:67;:50;:67;:::i;:::-;33870:29;;;:99;33759:458;;;34022:48;34032:8;:19;;;34053:16;34022:9;:48::i;:::-;34000:19;;;:70;34143:29;;;;34116:90;;34190:15;34116:9;:90::i;:::-;34084:29;;;:122;33759:458;33341:882;;;;;;;:::o;36940:253::-;37008:14;37025:37;37038:7;:23;;;37025:12;:37::i;:::-;37008:54;;37105:7;:13;;;37096:6;:22;37076:7;:17;;;:42;37072:115;;;37163:13;;;;37154:22;;37134:17;;;;:42;36940:253::o;149:3348:25:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149:3348:25;;;-1:-1:-1;149:3348:25;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;149:3348:25;-1:-1:-1;;;;;149:3348:25;;;;;;;;;;;-1:-1:-1;149:3348:25;;;;;;;-1:-1:-1;149:3348:25;;;-1:-1:-1;149:3348:25;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149:3348:25;;;-1:-1:-1;149:3348:25;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;149:3348:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;149:3348:25;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;1037:124;1101:20;;1126:30;1101:20;1126:30;;1168:128;1243:13;;1261:30;1243:13;1261:30;;1303:134;1381:13;;1399:33;1381:13;1399:33;;1444:186;1539:20;;1564:61;1539:20;1564:61;;1638:442;;1740:3;1733:4;1725:6;1721:17;1717:27;1707:2;;1758:1;1755;1748:12;1707:2;1795:6;1782:20;1817:65;1832:49;1874:6;1832:49;;;1817:65;;;1808:74;;1902:6;1895:5;1888:21;1938:4;1930:6;1926:17;1971:4;1964:5;1960:16;2006:3;1997:6;1992:3;1988:16;1985:25;1982:2;;;2023:1;2020;2013:12;1982:2;2033:41;2067:6;2062:3;2057;2033:41;;;1700:380;;;;;;;;2088:130;2155:20;;2180:33;2155:20;2180:33;;2366:241;;2470:2;2458:9;2449:7;2445:23;2441:32;2438:2;;;2486:1;2483;2476:12;2438:2;2521:1;2538:53;2583:7;2563:9;2538:53;;2614:263;;2729:2;2717:9;2708:7;2704:23;2700:32;2697:2;;;2745:1;2742;2735:12;2697:2;2780:1;2797:64;2853:7;2833:9;2797:64;;2884:366;;;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3021:1;3018;3011:12;2973:2;3056:1;3073:53;3118:7;3098:9;3073:53;;;3063:63;;3035:97;3163:2;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;;;3171:63;;3142:98;2967:283;;;;;;3257:491;;;;3395:2;3383:9;3374:7;3370:23;3366:32;3363:2;;;3411:1;3408;3401:12;3363:2;3446:1;3463:53;3508:7;3488:9;3463:53;;;3453:63;;3425:97;3553:2;3571:53;3616:7;3607:6;3596:9;3592:22;3571:53;;;3561:63;;3532:98;3661:2;3679:53;3724:7;3715:6;3704:9;3700:22;3679:53;;;3669:63;;3640:98;3357:391;;;;;;3755:366;;;3876:2;3864:9;3855:7;3851:23;3847:32;3844:2;;;3892:1;3889;3882:12;3844:2;3927:1;3944:53;3989:7;3969:9;3944:53;;;3934:63;;3906:97;4034:2;4052:53;4097:7;4088:6;4077:9;4073:22;4052:53;;4128:795;;;;;;4332:2;4320:9;4311:7;4307:23;4303:32;4300:2;;;4348:1;4345;4338:12;4300:2;4383:31;;4434:18;4423:30;;4420:2;;;4466:1;4463;4456:12;4420:2;4494:80;4566:7;4557:6;4546:9;4542:22;4494:80;;;4484:90;;;;4362:218;4639:2;4628:9;4624:18;4611:32;4663:18;4655:6;4652:30;4649:2;;;4695:1;4692;4685:12;4649:2;4723:79;4794:7;4785:6;4774:9;4770:22;4723:79;;;4713:89;;;;4590:218;4839:2;4857:50;4899:7;4890:6;4879:9;4875:22;4857:50;;;4847:60;;4818:95;4294:629;;;;;;;;;4930:257;;5042:2;5030:9;5021:7;5017:23;5013:32;5010:2;;;5058:1;5055;5048:12;5010:2;5093:1;5110:61;5163:7;5143:9;5110:61;;5194:263;;5309:2;5297:9;5288:7;5284:23;5280:32;5277:2;;;5325:1;5322;5315:12;5277:2;5360:1;5377:64;5433:7;5413:9;5377:64;;5464:885;;;;;5667:3;5655:9;5646:7;5642:23;5638:33;5635:2;;;5684:1;5681;5674:12;5635:2;5719:1;5736:81;5809:7;5789:9;5736:81;;;5726:91;;5698:125;5882:2;5871:9;5867:18;5854:32;5906:18;5898:6;5895:30;5892:2;;;5938:1;5935;5928:12;5892:2;5958:63;6013:7;6004:6;5993:9;5989:22;5958:63;;;5948:73;;5833:194;6086:2;6075:9;6071:18;6058:32;6110:18;6102:6;6099:30;6096:2;;;6142:1;6139;6132:12;6096:2;6162:63;6217:7;6208:6;6197:9;6193:22;6162:63;;;6152:73;;6037:194;6262:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;;;6270:63;;6241:98;5629:720;;;;;;;;6356:241;;6460:2;6448:9;6439:7;6435:23;6431:32;6428:2;;;6476:1;6473;6466:12;6428:2;6511:1;6528:53;6573:7;6553:9;6528:53;;6874:801;;;;;;7081:2;7069:9;7060:7;7056:23;7052:32;7049:2;;;7097:1;7094;7087:12;7049:2;7132:1;7149:53;7194:7;7174:9;7149:53;;;7139:63;;7111:97;7267:2;7256:9;7252:18;7239:32;7291:18;7283:6;7280:30;7277:2;;;7323:1;7320;7313:12;7277:2;7351:80;7423:7;7414:6;7403:9;7399:22;7351:80;;;7341:90;;;;7218:219;7496:2;7485:9;7481:18;7468:32;7520:18;7512:6;7509:30;7506:2;;;7552:1;7549;7542:12;7506:2;7580:79;7651:7;7642:6;7631:9;7627:22;7580:79;;;7570:89;;;;7447:218;7043:632;;;;;;;;;7682:366;;;7803:2;7791:9;7782:7;7778:23;7774:32;7771:2;;;7819:1;7816;7809:12;7771:2;7854:1;7871:53;7916:7;7896:9;7871:53;;8055:399;;;8187:2;8175:9;8166:7;8162:23;8158:32;8155:2;;;8203:1;8200;8193:12;8155:2;8238:1;8255:64;8311:7;8291:9;8255:64;;;8245:74;;8217:108;8356:2;8374:64;8430:7;8421:6;8410:9;8406:22;8374:64;;8462:173;;8549:46;8591:3;8583:6;8549:46;;;-1:-1;;8624:4;8615:14;;8542:93;8644:169;;8729:44;8769:3;8761:6;8729:44;;8821:142;8912:45;8951:5;8912:45;;;8907:3;8900:58;8894:69;;;8970:103;9043:24;9061:5;9043:24;;9231:690;;9376:54;9424:5;9376:54;;;9443:86;9522:6;9517:3;9443:86;;;9436:93;;9550:56;9600:5;9550:56;;;9626:7;9654:1;9639:260;9664:6;9661:1;9658:13;9639:260;;;9731:6;9725:13;9752:63;9811:3;9796:13;9752:63;;;9745:70;;9832:60;9885:6;9832:60;;;9822:70;-1:-1;;9686:1;9679:9;9639:260;;;-1:-1;9912:3;;9355:566;-1:-1;;;;;9355:566;9958:682;;10101:53;10148:5;10101:53;;;10167:85;10245:6;10240:3;10167:85;;;10160:92;;10273:55;10322:5;10273:55;;;10348:7;10376:1;10361:257;10386:6;10383:1;10380:13;10361:257;;;10453:6;10447:13;10474:61;10531:3;10516:13;10474:61;;;10467:68;;10552:59;10604:6;10552:59;;;10542:69;-1:-1;;10408:1;10401:9;10361:257;;10648:104;10725:21;10740:5;10725:21;;10759:113;10842:24;10860:5;10842:24;;10879:182;10990:65;11049:5;10990:65;;11233:347;;11345:39;11378:5;11345:39;;;11396:71;11460:6;11455:3;11396:71;;;11389:78;;11472:52;11517:6;11512:3;11505:4;11498:5;11494:16;11472:52;;;11545:29;11567:6;11545:29;;;11536:39;;;;11325:255;-1:-1;;;11325:255;11934:364;;12094:67;12158:2;12153:3;12094:67;;;-1:-1;;;12174:87;;12289:2;12280:12;;12080:218;-1:-1;;12080:218;12680:465;;12840:67;12904:2;12899:3;12840:67;;;12940:66;12920:87;;-1:-1;;;13036:2;13027:12;;13020:88;13136:2;13127:12;;12826:319;-1:-1;;12826:319;13154:364;;13314:67;13378:2;13373:3;13314:67;;;-1:-1;;;13394:87;;13509:2;13500:12;;13300:218;-1:-1;;13300:218;13900:465;;14060:67;14124:2;14119:3;14060:67;;;14160:66;14140:87;;-1:-1;;;14256:2;14247:12;;14240:88;14356:2;14347:12;;14046:319;-1:-1;;14046:319;14374:364;;14534:67;14598:2;14593:3;14534:67;;;14634:66;14614:87;;14729:2;14720:12;;14520:218;-1:-1;;14520:218;14747:364;;14907:67;14971:2;14966:3;14907:67;;;-1:-1;;;14987:87;;15102:2;15093:12;;14893:218;-1:-1;;14893:218;15120:364;;15280:67;15344:2;15339:3;15280:67;;;15380:66;15360:87;;15475:2;15466:12;;15266:218;-1:-1;;15266:218;15866:465;;16026:67;16090:2;16085:3;16026:67;;;16126:66;16106:87;;-1:-1;;;16222:2;16213:12;;16206:88;16322:2;16313:12;;16012:319;-1:-1;;16012:319;16340:364;;16500:67;16564:2;16559:3;16500:67;;;-1:-1;;;16580:87;;16695:2;16686:12;;16486:218;-1:-1;;16486:218;16713:465;;16873:67;16937:2;16932:3;16873:67;;;16973:66;16953:87;;-1:-1;;;17069:2;17060:12;;17053:88;17169:2;17160:12;;16859:319;-1:-1;;16859:319;17187:465;;17347:67;17411:2;17406:3;17347:67;;;17447:66;17427:87;;-1:-1;;;17543:2;17534:12;;17527:88;17643:2;17634:12;;17333:319;-1:-1;;17333:319;18780:364;;18940:67;19004:2;18999:3;18940:67;;;19040:66;19020:87;;19135:2;19126:12;;18926:218;-1:-1;;18926:218;19153:364;;19313:67;19377:2;19372:3;19313:67;;;19413:66;19393:87;;19508:2;19499:12;;19299:218;-1:-1;;19299:218;19526:465;;19686:67;19750:2;19745:3;19686:67;;;19786:66;19766:87;;-1:-1;;;19882:2;19873:12;;19866:88;19982:2;19973:12;;19672:319;-1:-1;;19672:319;20000:364;;20160:67;20224:2;20219:3;20160:67;;;-1:-1;;;20240:87;;20355:2;20346:12;;20146:218;-1:-1;;20146:218;21966:465;;22126:67;22190:2;22185:3;22126:67;;;22226:66;22206:87;;-1:-1;;;22322:2;22313:12;;22306:88;22422:2;22413:12;;22112:319;-1:-1;;22112:319;22440:364;;22600:67;22664:2;22659:3;22600:67;;;22700:66;22680:87;;22795:2;22786:12;;22586:218;-1:-1;;22586:218;22813:364;;22973:67;23037:2;23032:3;22973:67;;;23073:66;23053:87;;23168:2;23159:12;;22959:218;-1:-1;;22959:218;23186:364;;23346:67;23410:2;23405:3;23346:67;;;23446:66;23426:87;;23541:2;23532:12;;23332:218;-1:-1;;23332:218;23559:364;;23719:67;23783:2;23778:3;23719:67;;;-1:-1;;;23799:87;;23914:2;23905:12;;23705:218;-1:-1;;23705:218;23932:465;;24092:67;24156:2;24151:3;24092:67;;;24192:66;24172:87;;-1:-1;;;24288:2;24279:12;;24272:88;24388:2;24379:12;;24078:319;-1:-1;;24078:319;24779:465;;24939:67;25003:2;24998:3;24939:67;;;25039:66;25019:87;;-1:-1;;;25135:2;25126:12;;25119:88;25235:2;25226:12;;24925:319;-1:-1;;24925:319;25253:465;;25413:67;25477:2;25472:3;25413:67;;;25513:66;25493:87;;-1:-1;;;25609:2;25600:12;;25593:88;25709:2;25700:12;;25399:319;-1:-1;;25399:319;26100:364;;26260:67;26324:2;26319:3;26260:67;;;26360:66;26340:87;;26455:2;26446:12;;26246:218;-1:-1;;26246:218;26846:465;;27006:67;27070:2;27065:3;27006:67;;;27106:66;27086:87;;-1:-1;;;27202:2;27193:12;;27186:88;27302:2;27293:12;;26992:319;-1:-1;;26992:319;27777:1474;28006:22;;27938:5;27929:15;;;28034:62;27933:3;28006:22;28034:62;;;27959:143;28178:4;28171:5;28167:16;28161:23;28190:63;28247:4;28242:3;28238:14;28224:12;28190:63;;;28112:147;28337:4;28330:5;28326:16;28320:23;28349:63;28406:4;28401:3;28397:14;28383:12;28349:63;;;28269:149;28492:4;28485:5;28481:16;28475:23;28504:63;28561:4;28556:3;28552:14;28538:12;28504:63;;;28428:145;28657:4;28650:5;28646:16;28640:23;28669:63;28726:4;28721:3;28717:14;28703:12;28669:63;;;28583:155;28823:4;28816:5;28812:16;28806:23;28835:63;28892:4;28887:3;28883:14;28869:12;28835:63;;;28748:156;28991:4;28984:5;28980:16;28974:23;29003:63;29060:4;29055:3;29051:14;29037:12;29003:63;;;28914:158;29155:4;29148:5;29144:16;29138:23;29167:63;29224:4;29219:3;29215:14;29201:12;29167:63;;29333:503;29557:22;;29484:4;29475:14;;;29585:62;29479:3;29557:22;29585:62;;;29504:149;29740:4;29733:5;29729:16;29723:23;29752:63;29809:4;29804:3;29800:14;29786:12;29752:63;;29920:656;30143:22;;30073:4;30064:14;;;30171:62;30068:3;30143:22;30171:62;;;30093:146;30318:4;30311:5;30307:16;30301:23;30330:63;30387:4;30382:3;30378:14;30364:12;30330:63;;;30249:150;30480:4;30473:5;30469:16;30463:23;30492:63;30549:4;30544:3;30540:14;30526:12;30492:63;;30813:100;30884:23;30901:5;30884:23;;31037:213;31155:2;31140:18;;31169:71;31144:9;31213:6;31169:71;;31257:340;31411:2;31396:18;;31425:79;31400:9;31477:6;31425:79;;;31515:72;31583:2;31572:9;31568:18;31559:6;31515:72;;31604:451;31786:2;31771:18;;31800:79;31775:9;31852:6;31800:79;;;31890:72;31958:2;31947:9;31943:18;31934:6;31890:72;;;31973;32041:2;32030:9;32026:18;32017:6;31973:72;;32062:324;32208:2;32193:18;;32222:71;32197:9;32266:6;32222:71;;;32304:72;32372:2;32361:9;32357:18;32348:6;32304:72;;32393:616;32637:2;32651:47;;;32622:18;;32712:108;32622:18;32806:6;32712:108;;;32704:116;;32868:9;32862:4;32858:20;32853:2;32842:9;32838:18;32831:48;32893:106;32994:4;32985:6;32893:106;;33016:201;33128:2;33113:18;;33142:65;33117:9;33180:6;33142:65;;33224:423;33392:2;33377:18;;33406:65;33381:9;33444:6;33406:65;;;33482:72;33550:2;33539:9;33535:18;33526:6;33482:72;;33654:213;33772:2;33757:18;;33786:71;33761:9;33830:6;33786:71;;33874:269;34020:2;34005:18;;34034:99;34009:9;34106:6;34034:99;;34402:293;34536:2;34550:47;;;34521:18;;34611:74;34521:18;34671:6;34611:74;;35010:407;35201:2;35215:47;;;35186:18;;35276:131;35186:18;35276:131;;35838:407;36029:2;36043:47;;;36014:18;;36104:131;36014:18;36104:131;;36252:407;36443:2;36457:47;;;36428:18;;36518:131;36428:18;36518:131;;37080:407;37271:2;37285:47;;;37256:18;;37346:131;37256:18;37346:131;;37494:407;37685:2;37699:47;;;37670:18;;37760:131;37670:18;37760:131;;37908:407;38099:2;38113:47;;;38084:18;;38174:131;38084:18;38174:131;;38322:407;38513:2;38527:47;;;38498:18;;38588:131;38498:18;38588:131;;39150:407;39341:2;39355:47;;;39326:18;;39416:131;39326:18;39416:131;;39564:407;39755:2;39769:47;;;39740:18;;39830:131;39740:18;39830:131;;39978:407;40169:2;40183:47;;;40154:18;;40244:131;40154:18;40244:131;;40392:407;40583:2;40597:47;;;40568:18;;40658:131;40568:18;40658:131;;42048:407;42239:2;42253:47;;;42224:18;;42314:131;42224:18;42314:131;;42462:407;42653:2;42667:47;;;42638:18;;42728:131;42638:18;42728:131;;42876:407;43067:2;43081:47;;;43052:18;;43142:131;43052:18;43142:131;;43290:407;43481:2;43495:47;;;43466:18;;43556:131;43466:18;43556:131;;45360:407;45551:2;45565:47;;;45536:18;;45626:131;45536:18;45626:131;;45774:407;45965:2;45979:47;;;45950:18;;46040:131;45950:18;46040:131;;46188:407;46379:2;46393:47;;;46364:18;;46454:131;46364:18;46454:131;;46602:407;46793:2;46807:47;;;46778:18;;46868:131;46778:18;46868:131;;47016:407;47207:2;47221:47;;;47192:18;;47282:131;47192:18;47282:131;;47430:407;47621:2;47635:47;;;47606:18;;47696:131;47606:18;47696:131;;48258:407;48449:2;48463:47;;;48434:18;;48524:131;48434:18;48524:131;;48672:407;48863:2;48877:47;;;48848:18;;48938:131;48848:18;48938:131;;49500:407;49691:2;49705:47;;;49676:18;;49766:131;49676:18;49766:131;;50328:407;50519:2;50533:47;;;50504:18;;50594:131;50504:18;50594:131;;51156:350;51342:3;51327:19;;51357:139;51331:9;51469:6;51357:139;;51513:329;51689:2;51674:18;;51703:129;51678:9;51805:6;51703:129;;51849:333;52027:2;52012:18;;52041:131;52016:9;52145:6;52041:131;;52409:727;52681:2;52666:18;;52695:71;52670:9;52739:6;52695:71;;;52814:9;52808:4;52804:20;52799:2;52788:9;52784:18;52777:48;52839:108;52942:4;52933:6;52839:108;;;52831:116;;52995:9;52989:4;52985:20;52980:2;52969:9;52965:18;52958:48;53020:106;53121:4;53112:6;53020:106;;;53012:114;52652:484;-1:-1;;;;;52652:484;53143:324;53289:2;53274:18;;53303:71;53278:9;53347:6;53303:71;;53474:435;53648:2;53633:18;;53662:71;53637:9;53706:6;53662:71;;53916:659;54146:3;54131:19;;54161:71;54135:9;54205:6;54161:71;;;54243:72;54311:2;54300:9;54296:18;54287:6;54243:72;;;54326;54394:2;54383:9;54379:18;54370:6;54326:72;;;54409;54477:2;54466:9;54462:18;54453:6;54409:72;;;54492:73;54560:3;54549:9;54545:19;54536:6;54492:73;;;54117:458;;;;;;;;;54582:209;54698:2;54683:18;;54712:69;54687:9;54754:6;54712:69;;54798:256;54860:2;54854:9;54886:17;;;54961:18;54946:34;;54982:22;;;54943:62;54940:2;;;55018:1;55015;55008:12;54940:2;55034;55027:22;54838:216;;-1:-1;54838:216;55061:322;;55205:18;55197:6;55194:30;55191:2;;;55237:1;55234;55227:12;55191:2;-1:-1;55368:4;55304;55281:17;;;;-1:-1;;55277:33;55358:15;;55128:255;55390:151;55514:4;55505:14;;55462:79;55705:137;55808:12;;55779:63;56476:178;56594:19;;;56643:4;56634:14;;56587:67;57020:91;;57082:24;57100:5;57082:24;;57118:85;57184:13;57177:21;;57160:43;57289:119;;57379:24;57397:5;57379:24;;57415:121;-1:-1;;;;;57477:54;;57460:76;57622:88;57694:10;57683:22;;57666:44;57717:129;;57804:37;57835:5;57804:37;;58715:145;58796:6;58791:3;58786;58773:30;-1:-1;58852:1;58834:16;;58827:27;58766:94;58869:268;58934:1;58941:101;58955:6;58952:1;58949:13;58941:101;;;59022:11;;;59016:18;59003:11;;;58996:39;58977:2;58970:10;58941:101;;;59057:6;59054:1;59051:13;59048:2;;;-1:-1;;59122:1;59104:16;;59097:27;58918:219;59145:97;59233:2;59213:14;-1:-1;;59209:28;;59193:49;59250:117;59319:24;59337:5;59319:24;;;59312:5;59309:35;59299:2;;59358:1;59355;59348:12;59374:111;59440:21;59455:5;59440:21;;59492:117;59561:24;59579:5;59561:24;;59616:173;59713:52;59759:5;59713:52;",
  "source": "pragma solidity >=0.5.10 <0.6.0;\npragma experimental ABIEncoderV2;\n\nimport {RToken} from '../RToken.sol';\n\n/**\n * @dev Test RTokenStorage Layout\n */\ncontract RTokenStorageLayoutTester is RToken {\n    function validate() public pure {\n        uint256 slot;\n        uint256 offset;\n\n        // address public _owner;\n        assembly { slot:= _owner_slot offset := _owner_offset }\n        require (slot == 0 && offset == 0, \"_owner changed location\");\n\n        // bool public initialized;\n        assembly { slot:= initialized_slot offset := initialized_offset }\n        require (slot == 0 && offset == 20, \"initialized changed location\");\n\n        // uint256 public _guardCounter;\n        assembly { slot:= _guardCounter_slot offset := _guardCounter_offset }\n        require (slot == 1 && offset == 0, \"_guardCounter changed location\");\n\n        // string public name;\n        assembly { slot:= name_slot offset := name_offset }\n        require (slot == 2 && offset == 0, \"name changed location\");\n\n        // string public symbol;\n        assembly { slot:= symbol_slot offset := symbol_offset }\n        require (slot == 3 && offset == 0, \"symbol changed location\");\n\n        // string public decimals;\n        assembly { slot:= decimals_slot offset := decimals_offset }\n        require (slot == 4 && offset == 0, \"decimals changed location\");\n\n        // string public totalSupply;\n        assembly { slot:= totalSupply_slot offset := totalSupply_offset }\n        require (slot == 5 && offset == 0, \"totalSupply changed location\");\n\n        // string public ias;\n        assembly { slot:= ias_slot offset := ias_offset }\n        require (slot == 6 && offset == 0, \"ias changed location\");\n\n        // string public token;\n        assembly { slot:= token_slot offset := token_offset }\n        require (slot == 7 && offset == 0, \"token changed location\");\n\n        // string public savingAssetOrignalAmount;\n        assembly { slot:= savingAssetOrignalAmount_slot offset := savingAssetOrignalAmount_offset }\n        require (slot == 8 && offset == 0, \"savingAssetOrignalAmount changed location\");\n\n        // string public savingAssetConversionRate;\n        assembly { slot:= savingAssetConversionRate_slot offset := savingAssetConversionRate_offset }\n        require (slot == 9 && offset == 0, \"savingAssetOrignalAmount changed location\");\n\n        // string public transferAllowances;\n        assembly { slot:= transferAllowances_slot offset := transferAllowances_offset }\n        require (slot == 10 && offset == 0, \"savingAssetOrignalAmount changed location\");\n\n        // string public hats;\n        assembly { slot:= hats_slot offset := hats_offset }\n        require (slot == 11 && offset == 0, \"hats changed location\");\n\n        // string public accounts;\n        assembly { slot:= accounts_slot offset := accounts_offset }\n        require (slot == 12 && offset == 0, \"accounts changed location\");\n\n        /* Account storage account = accounts[address(0)];\n        assembly { slot:= account.hatID_slot offset := account.hatID_offset }\n        require (slot == 12 && offset == 0, \"accounts changed location\"); */\n\n        // string public accountStats;\n        assembly { slot:= accountStats_slot offset := accountStats_offset }\n        require (slot == 13 && offset == 0, \"accountStats changed location\");\n\n        // string public hatStats;\n        assembly { slot:= hatStats_slot offset := hatStats_offset }\n        require (slot == 14 && offset == 0, \"hatStats changed location\");\n    }\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/test/StorageLayout.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/test/StorageLayout.sol",
    "exportedSymbols": {
      "RTokenStorageLayoutTester": [
        10390
      ]
    },
    "id": 10391,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10182,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:32:25"
      },
      {
        "id": 10183,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:33:25"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10185,
        "nodeType": "ImportDirective",
        "scope": 10391,
        "sourceUnit": 9288,
        "src": "68:37:25",
        "symbolAliases": [
          {
            "foreign": 10184,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10186,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "187:6:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10187,
            "nodeType": "InheritanceSpecifier",
            "src": "187:6:25"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@dev Test RTokenStorage Layout",
        "fullyImplemented": true,
        "id": 10390,
        "linearizedBaseContracts": [
          10390,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "RTokenStorageLayoutTester",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10388,
              "nodeType": "Block",
              "src": "232:3263:25",
              "statements": [
                {
                  "assignments": [
                    10191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10191,
                      "name": "slot",
                      "nodeType": "VariableDeclaration",
                      "scope": 10388,
                      "src": "242:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10190,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "242:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10192,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "242:12:25"
                },
                {
                  "assignments": [
                    10194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10194,
                      "name": "offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 10388,
                      "src": "264:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10193,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "264:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "264:14:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "334:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_owner_slot": {
                        "declaration": 9302,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "341:11:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "353:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_owner_offset": {
                        "declaration": 9302,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "363:13:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10196,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := _owner_slot\n    offset := _owner_offset\n}",
                  "src": "323:55:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10198,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "396:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10199,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "404:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "396:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10201,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "409:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "419:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "409:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "396:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5f6f776e6572206368616e676564206c6f636174696f6e",
                        "id": 10205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "422:25:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_533d2301823d580cb546c9d1ac477da7778d7dd5191701878f391e5354c5456f",
                          "typeString": "literal_string \"_owner changed location\""
                        },
                        "value": "_owner changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_533d2301823d580cb546c9d1ac477da7778d7dd5191701878f391e5354c5456f",
                          "typeString": "literal_string \"_owner changed location\""
                        }
                      ],
                      "id": 10197,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "387:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "387:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10207,
                  "nodeType": "ExpressionStatement",
                  "src": "387:61:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "506:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "initialized_slot": {
                        "declaration": 9304,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "513:16:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "530:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "initialized_offset": {
                        "declaration": 9304,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "540:18:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10208,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := initialized_slot\n    offset := initialized_offset\n}",
                  "src": "495:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10210,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "578:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "586:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "578:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10213,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "591:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3230",
                            "id": 10214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "601:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_20_by_1",
                              "typeString": "int_const 20"
                            },
                            "value": "20"
                          },
                          "src": "591:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "578:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e697469616c697a6564206368616e676564206c6f636174696f6e",
                        "id": 10217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "605:30:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4ececdac160e46e5a724c4cfe05e5fac7782a85f83712166f87df5dd59d455b4",
                          "typeString": "literal_string \"initialized changed location\""
                        },
                        "value": "initialized changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4ececdac160e46e5a724c4cfe05e5fac7782a85f83712166f87df5dd59d455b4",
                          "typeString": "literal_string \"initialized changed location\""
                        }
                      ],
                      "id": 10209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "569:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "569:67:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10219,
                  "nodeType": "ExpressionStatement",
                  "src": "569:67:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "699:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_guardCounter_slot": {
                        "declaration": 9306,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "706:18:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "725:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_guardCounter_offset": {
                        "declaration": 9306,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "735:20:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10220,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := _guardCounter_slot\n    offset := _guardCounter_offset\n}",
                  "src": "688:69:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10222,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "775:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 10223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "783:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "775:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10225,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "788:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "798:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "788:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "775:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5f6775617264436f756e746572206368616e676564206c6f636174696f6e",
                        "id": 10229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "801:32:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_589ae6b5e848f47c37be2f22d190fcde15f09d2d7c7ce8669807eb4378068f7a",
                          "typeString": "literal_string \"_guardCounter changed location\""
                        },
                        "value": "_guardCounter changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_589ae6b5e848f47c37be2f22d190fcde15f09d2d7c7ce8669807eb4378068f7a",
                          "typeString": "literal_string \"_guardCounter changed location\""
                        }
                      ],
                      "id": 10221,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "766:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "766:68:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10231,
                  "nodeType": "ExpressionStatement",
                  "src": "766:68:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "887:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "name_slot": {
                        "declaration": 9308,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "894:9:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "904:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "name_offset": {
                        "declaration": 9308,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "914:11:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10232,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := name_slot\n    offset := name_offset\n}",
                  "src": "876:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10234,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "945:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 10235,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "953:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "945:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10237,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "958:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "968:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "958:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "945:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e616d65206368616e676564206c6f636174696f6e",
                        "id": 10241,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "971:23:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e104883c4694d261f165668e614beff89bcef4cc639b824e1917cced2a161415",
                          "typeString": "literal_string \"name changed location\""
                        },
                        "value": "name changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e104883c4694d261f165668e614beff89bcef4cc639b824e1917cced2a161415",
                          "typeString": "literal_string \"name changed location\""
                        }
                      ],
                      "id": 10233,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "936:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "936:59:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10243,
                  "nodeType": "ExpressionStatement",
                  "src": "936:59:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1050:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "symbol_slot": {
                        "declaration": 9310,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1057:11:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1069:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "symbol_offset": {
                        "declaration": 9310,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1079:13:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10244,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := symbol_slot\n    offset := symbol_offset\n}",
                  "src": "1039:55:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10246,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1112:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 10247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1120:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "src": "1112:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10249,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1125:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1135:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1125:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1112:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73796d626f6c206368616e676564206c6f636174696f6e",
                        "id": 10253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1138:25:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ffd76ba95a15e6c36fc4b14f875304f2e6e60a656ec821b1d264f46e6880b51e",
                          "typeString": "literal_string \"symbol changed location\""
                        },
                        "value": "symbol changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ffd76ba95a15e6c36fc4b14f875304f2e6e60a656ec821b1d264f46e6880b51e",
                          "typeString": "literal_string \"symbol changed location\""
                        }
                      ],
                      "id": 10245,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1103:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1103:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10255,
                  "nodeType": "ExpressionStatement",
                  "src": "1103:61:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1221:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "decimals_slot": {
                        "declaration": 9312,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1228:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1242:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "decimals_offset": {
                        "declaration": 9312,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1252:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10256,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := decimals_slot\n    offset := decimals_offset\n}",
                  "src": "1210:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10258,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1287:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 10259,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1295:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "1287:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10261,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1300:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1310:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1300:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1287:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "646563696d616c73206368616e676564206c6f636174696f6e",
                        "id": 10265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1313:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7d1e6be60ed6804ef19398fcf457a8e73e58c5bffbff497fa8efd8816eeb868e",
                          "typeString": "literal_string \"decimals changed location\""
                        },
                        "value": "decimals changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7d1e6be60ed6804ef19398fcf457a8e73e58c5bffbff497fa8efd8816eeb868e",
                          "typeString": "literal_string \"decimals changed location\""
                        }
                      ],
                      "id": 10257,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1278:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1278:63:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10267,
                  "nodeType": "ExpressionStatement",
                  "src": "1278:63:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1401:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "totalSupply_slot": {
                        "declaration": 9314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1408:16:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1425:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "totalSupply_offset": {
                        "declaration": 9314,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1435:18:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10268,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := totalSupply_slot\n    offset := totalSupply_offset\n}",
                  "src": "1390:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10270,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1473:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 10271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1481:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "src": "1473:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10273,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1486:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1496:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1486:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1473:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f74616c537570706c79206368616e676564206c6f636174696f6e",
                        "id": 10277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1499:30:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1d9cc6853c16703260d531bfc44686ec1f14054d7ccfbeab428d5657f683137",
                          "typeString": "literal_string \"totalSupply changed location\""
                        },
                        "value": "totalSupply changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1d9cc6853c16703260d531bfc44686ec1f14054d7ccfbeab428d5657f683137",
                          "typeString": "literal_string \"totalSupply changed location\""
                        }
                      ],
                      "id": 10269,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1464:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1464:66:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10279,
                  "nodeType": "ExpressionStatement",
                  "src": "1464:66:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1582:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "ias_slot": {
                        "declaration": 9316,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1589:8:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1598:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "ias_offset": {
                        "declaration": 9316,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1608:10:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10280,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := ias_slot\n    offset := ias_offset\n}",
                  "src": "1571:49:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10282,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1638:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "36",
                            "id": 10283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1646:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_6_by_1",
                              "typeString": "int_const 6"
                            },
                            "value": "6"
                          },
                          "src": "1638:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10285,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1651:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1661:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1651:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1638:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696173206368616e676564206c6f636174696f6e",
                        "id": 10289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1664:22:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_215de22b4d0ebfe232dbce3efb34cb6dd6c2b14a49a12c67f89bd565fd1e6d1b",
                          "typeString": "literal_string \"ias changed location\""
                        },
                        "value": "ias changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_215de22b4d0ebfe232dbce3efb34cb6dd6c2b14a49a12c67f89bd565fd1e6d1b",
                          "typeString": "literal_string \"ias changed location\""
                        }
                      ],
                      "id": 10281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1629:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1629:58:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10291,
                  "nodeType": "ExpressionStatement",
                  "src": "1629:58:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1741:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "token_slot": {
                        "declaration": 9318,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1748:10:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1759:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "token_offset": {
                        "declaration": 9318,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1769:12:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10292,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := token_slot\n    offset := token_offset\n}",
                  "src": "1730:53:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10294,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1801:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 10295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1809:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "src": "1801:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10297,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1814:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1824:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1814:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1801:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e206368616e676564206c6f636174696f6e",
                        "id": 10301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1827:24:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_053752854c7417908c67de2280681cf41e2885c3ad16fec19b9eb5e288e86de9",
                          "typeString": "literal_string \"token changed location\""
                        },
                        "value": "token changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_053752854c7417908c67de2280681cf41e2885c3ad16fec19b9eb5e288e86de9",
                          "typeString": "literal_string \"token changed location\""
                        }
                      ],
                      "id": 10293,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1792:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1792:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10303,
                  "nodeType": "ExpressionStatement",
                  "src": "1792:60:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1925:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetOrignalAmount_slot": {
                        "declaration": 9320,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1932:29:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1962:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetOrignalAmount_offset": {
                        "declaration": 9320,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1972:31:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10304,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := savingAssetOrignalAmount_slot\n    offset := savingAssetOrignalAmount_offset\n}",
                  "src": "1914:91:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10306,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2023:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 10307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2031:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "2023:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10309,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2036:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2046:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2036:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2023:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2049:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10305,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2014:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2014:79:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10315,
                  "nodeType": "ExpressionStatement",
                  "src": "2014:79:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2167:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetConversionRate_slot": {
                        "declaration": 9322,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2174:30:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2205:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetConversionRate_offset": {
                        "declaration": 9322,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2215:32:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10316,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := savingAssetConversionRate_slot\n    offset := savingAssetConversionRate_offset\n}",
                  "src": "2156:93:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10318,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2267:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "39",
                            "id": 10319,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2275:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_9_by_1",
                              "typeString": "int_const 9"
                            },
                            "value": "9"
                          },
                          "src": "2267:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10321,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2280:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2290:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2280:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2267:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2293:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10317,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2258:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2258:79:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10327,
                  "nodeType": "ExpressionStatement",
                  "src": "2258:79:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2404:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "transferAllowances_slot": {
                        "declaration": 9328,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2411:23:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2435:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "transferAllowances_offset": {
                        "declaration": 9328,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2445:25:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10328,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := transferAllowances_slot\n    offset := transferAllowances_offset\n}",
                  "src": "2393:79:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10330,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2490:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3130",
                            "id": 10331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2498:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "2490:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10333,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2504:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2514:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2504:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2490:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2517:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10329,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2481:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2481:80:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10339,
                  "nodeType": "ExpressionStatement",
                  "src": "2481:80:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2614:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hats_slot": {
                        "declaration": 9331,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2621:9:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2631:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hats_offset": {
                        "declaration": 9331,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2641:11:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10340,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := hats_slot\n    offset := hats_offset\n}",
                  "src": "2603:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10344,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10342,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2672:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3131",
                            "id": 10343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2680:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_11_by_1",
                              "typeString": "int_const 11"
                            },
                            "value": "11"
                          },
                          "src": "2672:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10345,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2686:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2696:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2686:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2672:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "68617473206368616e676564206c6f636174696f6e",
                        "id": 10349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2699:23:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8be37b68f7e893f838f6cb121e669c0d2d80ef602a954743c51061143cb586fe",
                          "typeString": "literal_string \"hats changed location\""
                        },
                        "value": "hats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8be37b68f7e893f838f6cb121e669c0d2d80ef602a954743c51061143cb586fe",
                          "typeString": "literal_string \"hats changed location\""
                        }
                      ],
                      "id": 10341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2663:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2663:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10351,
                  "nodeType": "ExpressionStatement",
                  "src": "2663:60:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2780:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accounts_slot": {
                        "declaration": 9335,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2787:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2801:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accounts_offset": {
                        "declaration": 9335,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2811:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10352,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := accounts_slot\n    offset := accounts_offset\n}",
                  "src": "2769:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10354,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2846:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3132",
                            "id": 10355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2854:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_12_by_1",
                              "typeString": "int_const 12"
                            },
                            "value": "12"
                          },
                          "src": "2846:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10357,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2860:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2870:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2860:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2846:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6163636f756e7473206368616e676564206c6f636174696f6e",
                        "id": 10361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2873:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6f4cc672cb4d99cf4ce280bfa330dab0a36218bcb4ae8da6290167c677778cbb",
                          "typeString": "literal_string \"accounts changed location\""
                        },
                        "value": "accounts changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6f4cc672cb4d99cf4ce280bfa330dab0a36218bcb4ae8da6290167c677778cbb",
                          "typeString": "literal_string \"accounts changed location\""
                        }
                      ],
                      "id": 10353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2837:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2837:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10363,
                  "nodeType": "ExpressionStatement",
                  "src": "2837:64:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3177:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accountStats_slot": {
                        "declaration": 9339,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3184:17:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3202:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accountStats_offset": {
                        "declaration": 9339,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "3212:19:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10364,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := accountStats_slot\n    offset := accountStats_offset\n}",
                  "src": "3166:67:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10366,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "3251:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3133",
                            "id": 10367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3259:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_13_by_1",
                              "typeString": "int_const 13"
                            },
                            "value": "13"
                          },
                          "src": "3251:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10369,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "3265:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3275:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3265:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3251:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6163636f756e745374617473206368616e676564206c6f636174696f6e",
                        "id": 10373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3278:31:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c22497b8453de0267775bf013fe1925446d2251fdca2395bd58188b7a284896b",
                          "typeString": "literal_string \"accountStats changed location\""
                        },
                        "value": "accountStats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c22497b8453de0267775bf013fe1925446d2251fdca2395bd58188b7a284896b",
                          "typeString": "literal_string \"accountStats changed location\""
                        }
                      ],
                      "id": 10365,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "3242:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3242:68:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10375,
                  "nodeType": "ExpressionStatement",
                  "src": "3242:68:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3367:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hatStats_slot": {
                        "declaration": 9343,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3374:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3388:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hatStats_offset": {
                        "declaration": 9343,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "3398:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10376,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := hatStats_slot\n    offset := hatStats_offset\n}",
                  "src": "3356:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10378,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "3433:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3134",
                            "id": 10379,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3441:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_14_by_1",
                              "typeString": "int_const 14"
                            },
                            "value": "14"
                          },
                          "src": "3433:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10381,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "3447:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3457:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3447:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3433:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6861745374617473206368616e676564206c6f636174696f6e",
                        "id": 10385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3460:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36a703975ec46644537900aea28046c436d5c904dac68a108b1f2f9406414b37",
                          "typeString": "literal_string \"hatStats changed location\""
                        },
                        "value": "hatStats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36a703975ec46644537900aea28046c436d5c904dac68a108b1f2f9406414b37",
                          "typeString": "literal_string \"hatStats changed location\""
                        }
                      ],
                      "id": 10377,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "3424:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3424:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10387,
                  "nodeType": "ExpressionStatement",
                  "src": "3424:64:25"
                }
              ]
            },
            "documentation": null,
            "id": 10389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "217:2:25"
            },
            "returnParameters": {
              "id": 10189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "232:0:25"
            },
            "scope": 10390,
            "src": "200:3295:25",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10391,
        "src": "149:3348:25"
      }
    ],
    "src": "0:3498:25"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/test/StorageLayout.sol",
    "exportedSymbols": {
      "RTokenStorageLayoutTester": [
        10390
      ]
    },
    "id": 10391,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10182,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:32:25"
      },
      {
        "id": 10183,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:33:25"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10185,
        "nodeType": "ImportDirective",
        "scope": 10391,
        "sourceUnit": 9288,
        "src": "68:37:25",
        "symbolAliases": [
          {
            "foreign": 10184,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10186,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "187:6:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10187,
            "nodeType": "InheritanceSpecifier",
            "src": "187:6:25"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@dev Test RTokenStorage Layout",
        "fullyImplemented": true,
        "id": 10390,
        "linearizedBaseContracts": [
          10390,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "RTokenStorageLayoutTester",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10388,
              "nodeType": "Block",
              "src": "232:3263:25",
              "statements": [
                {
                  "assignments": [
                    10191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10191,
                      "name": "slot",
                      "nodeType": "VariableDeclaration",
                      "scope": 10388,
                      "src": "242:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10190,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "242:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10192,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "242:12:25"
                },
                {
                  "assignments": [
                    10194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10194,
                      "name": "offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 10388,
                      "src": "264:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10193,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "264:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "264:14:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "334:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_owner_slot": {
                        "declaration": 9302,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "341:11:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "353:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_owner_offset": {
                        "declaration": 9302,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "363:13:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10196,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := _owner_slot\n    offset := _owner_offset\n}",
                  "src": "323:55:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10198,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "396:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10199,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "404:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "396:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10201,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "409:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "419:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "409:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "396:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5f6f776e6572206368616e676564206c6f636174696f6e",
                        "id": 10205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "422:25:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_533d2301823d580cb546c9d1ac477da7778d7dd5191701878f391e5354c5456f",
                          "typeString": "literal_string \"_owner changed location\""
                        },
                        "value": "_owner changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_533d2301823d580cb546c9d1ac477da7778d7dd5191701878f391e5354c5456f",
                          "typeString": "literal_string \"_owner changed location\""
                        }
                      ],
                      "id": 10197,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "387:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "387:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10207,
                  "nodeType": "ExpressionStatement",
                  "src": "387:61:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "506:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "initialized_slot": {
                        "declaration": 9304,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "513:16:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "530:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "initialized_offset": {
                        "declaration": 9304,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "540:18:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10208,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := initialized_slot\n    offset := initialized_offset\n}",
                  "src": "495:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10210,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "578:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "586:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "578:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10213,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "591:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3230",
                            "id": 10214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "601:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_20_by_1",
                              "typeString": "int_const 20"
                            },
                            "value": "20"
                          },
                          "src": "591:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "578:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e697469616c697a6564206368616e676564206c6f636174696f6e",
                        "id": 10217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "605:30:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4ececdac160e46e5a724c4cfe05e5fac7782a85f83712166f87df5dd59d455b4",
                          "typeString": "literal_string \"initialized changed location\""
                        },
                        "value": "initialized changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4ececdac160e46e5a724c4cfe05e5fac7782a85f83712166f87df5dd59d455b4",
                          "typeString": "literal_string \"initialized changed location\""
                        }
                      ],
                      "id": 10209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "569:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "569:67:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10219,
                  "nodeType": "ExpressionStatement",
                  "src": "569:67:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "699:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_guardCounter_slot": {
                        "declaration": 9306,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "706:18:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "725:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "_guardCounter_offset": {
                        "declaration": 9306,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "735:20:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10220,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := _guardCounter_slot\n    offset := _guardCounter_offset\n}",
                  "src": "688:69:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10222,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "775:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 10223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "783:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "775:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10225,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "788:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "798:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "788:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "775:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5f6775617264436f756e746572206368616e676564206c6f636174696f6e",
                        "id": 10229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "801:32:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_589ae6b5e848f47c37be2f22d190fcde15f09d2d7c7ce8669807eb4378068f7a",
                          "typeString": "literal_string \"_guardCounter changed location\""
                        },
                        "value": "_guardCounter changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_589ae6b5e848f47c37be2f22d190fcde15f09d2d7c7ce8669807eb4378068f7a",
                          "typeString": "literal_string \"_guardCounter changed location\""
                        }
                      ],
                      "id": 10221,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "766:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "766:68:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10231,
                  "nodeType": "ExpressionStatement",
                  "src": "766:68:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "887:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "name_slot": {
                        "declaration": 9308,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "894:9:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "904:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "name_offset": {
                        "declaration": 9308,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "914:11:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10232,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := name_slot\n    offset := name_offset\n}",
                  "src": "876:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10234,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "945:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 10235,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "953:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "945:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10237,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "958:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "968:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "958:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "945:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e616d65206368616e676564206c6f636174696f6e",
                        "id": 10241,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "971:23:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e104883c4694d261f165668e614beff89bcef4cc639b824e1917cced2a161415",
                          "typeString": "literal_string \"name changed location\""
                        },
                        "value": "name changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e104883c4694d261f165668e614beff89bcef4cc639b824e1917cced2a161415",
                          "typeString": "literal_string \"name changed location\""
                        }
                      ],
                      "id": 10233,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "936:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "936:59:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10243,
                  "nodeType": "ExpressionStatement",
                  "src": "936:59:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1050:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "symbol_slot": {
                        "declaration": 9310,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1057:11:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1069:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "symbol_offset": {
                        "declaration": 9310,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1079:13:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10244,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := symbol_slot\n    offset := symbol_offset\n}",
                  "src": "1039:55:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10246,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1112:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 10247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1120:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "src": "1112:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10249,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1125:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1135:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1125:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1112:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73796d626f6c206368616e676564206c6f636174696f6e",
                        "id": 10253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1138:25:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ffd76ba95a15e6c36fc4b14f875304f2e6e60a656ec821b1d264f46e6880b51e",
                          "typeString": "literal_string \"symbol changed location\""
                        },
                        "value": "symbol changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ffd76ba95a15e6c36fc4b14f875304f2e6e60a656ec821b1d264f46e6880b51e",
                          "typeString": "literal_string \"symbol changed location\""
                        }
                      ],
                      "id": 10245,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1103:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1103:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10255,
                  "nodeType": "ExpressionStatement",
                  "src": "1103:61:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1221:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "decimals_slot": {
                        "declaration": 9312,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1228:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1242:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "decimals_offset": {
                        "declaration": 9312,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1252:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10256,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := decimals_slot\n    offset := decimals_offset\n}",
                  "src": "1210:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10258,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1287:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 10259,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1295:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "1287:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10261,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1300:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1310:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1300:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1287:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "646563696d616c73206368616e676564206c6f636174696f6e",
                        "id": 10265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1313:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7d1e6be60ed6804ef19398fcf457a8e73e58c5bffbff497fa8efd8816eeb868e",
                          "typeString": "literal_string \"decimals changed location\""
                        },
                        "value": "decimals changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7d1e6be60ed6804ef19398fcf457a8e73e58c5bffbff497fa8efd8816eeb868e",
                          "typeString": "literal_string \"decimals changed location\""
                        }
                      ],
                      "id": 10257,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1278:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1278:63:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10267,
                  "nodeType": "ExpressionStatement",
                  "src": "1278:63:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1401:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "totalSupply_slot": {
                        "declaration": 9314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1408:16:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1425:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "totalSupply_offset": {
                        "declaration": 9314,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1435:18:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10268,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := totalSupply_slot\n    offset := totalSupply_offset\n}",
                  "src": "1390:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10270,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1473:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 10271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1481:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "src": "1473:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10273,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1486:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1496:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1486:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1473:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f74616c537570706c79206368616e676564206c6f636174696f6e",
                        "id": 10277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1499:30:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1d9cc6853c16703260d531bfc44686ec1f14054d7ccfbeab428d5657f683137",
                          "typeString": "literal_string \"totalSupply changed location\""
                        },
                        "value": "totalSupply changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1d9cc6853c16703260d531bfc44686ec1f14054d7ccfbeab428d5657f683137",
                          "typeString": "literal_string \"totalSupply changed location\""
                        }
                      ],
                      "id": 10269,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1464:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1464:66:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10279,
                  "nodeType": "ExpressionStatement",
                  "src": "1464:66:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1582:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "ias_slot": {
                        "declaration": 9316,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1589:8:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1598:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "ias_offset": {
                        "declaration": 9316,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1608:10:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10280,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := ias_slot\n    offset := ias_offset\n}",
                  "src": "1571:49:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10282,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1638:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "36",
                            "id": 10283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1646:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_6_by_1",
                              "typeString": "int_const 6"
                            },
                            "value": "6"
                          },
                          "src": "1638:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10285,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1651:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1661:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1651:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1638:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696173206368616e676564206c6f636174696f6e",
                        "id": 10289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1664:22:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_215de22b4d0ebfe232dbce3efb34cb6dd6c2b14a49a12c67f89bd565fd1e6d1b",
                          "typeString": "literal_string \"ias changed location\""
                        },
                        "value": "ias changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_215de22b4d0ebfe232dbce3efb34cb6dd6c2b14a49a12c67f89bd565fd1e6d1b",
                          "typeString": "literal_string \"ias changed location\""
                        }
                      ],
                      "id": 10281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1629:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1629:58:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10291,
                  "nodeType": "ExpressionStatement",
                  "src": "1629:58:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1741:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "token_slot": {
                        "declaration": 9318,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1748:10:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1759:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "token_offset": {
                        "declaration": 9318,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1769:12:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10292,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := token_slot\n    offset := token_offset\n}",
                  "src": "1730:53:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10294,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "1801:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 10295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1809:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "src": "1801:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10297,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "1814:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1824:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1814:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1801:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e206368616e676564206c6f636174696f6e",
                        "id": 10301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1827:24:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_053752854c7417908c67de2280681cf41e2885c3ad16fec19b9eb5e288e86de9",
                          "typeString": "literal_string \"token changed location\""
                        },
                        "value": "token changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_053752854c7417908c67de2280681cf41e2885c3ad16fec19b9eb5e288e86de9",
                          "typeString": "literal_string \"token changed location\""
                        }
                      ],
                      "id": 10293,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1792:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1792:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10303,
                  "nodeType": "ExpressionStatement",
                  "src": "1792:60:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1925:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetOrignalAmount_slot": {
                        "declaration": 9320,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "1932:29:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1962:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetOrignalAmount_offset": {
                        "declaration": 9320,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "1972:31:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10304,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := savingAssetOrignalAmount_slot\n    offset := savingAssetOrignalAmount_offset\n}",
                  "src": "1914:91:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10306,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2023:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 10307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2031:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "2023:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10309,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2036:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2046:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2036:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2023:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2049:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10305,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2014:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2014:79:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10315,
                  "nodeType": "ExpressionStatement",
                  "src": "2014:79:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2167:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetConversionRate_slot": {
                        "declaration": 9322,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2174:30:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2205:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "savingAssetConversionRate_offset": {
                        "declaration": 9322,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2215:32:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10316,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := savingAssetConversionRate_slot\n    offset := savingAssetConversionRate_offset\n}",
                  "src": "2156:93:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10318,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2267:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "39",
                            "id": 10319,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2275:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_9_by_1",
                              "typeString": "int_const 9"
                            },
                            "value": "9"
                          },
                          "src": "2267:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10321,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2280:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2290:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2280:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2267:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2293:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10317,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2258:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2258:79:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10327,
                  "nodeType": "ExpressionStatement",
                  "src": "2258:79:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2404:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "transferAllowances_slot": {
                        "declaration": 9328,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2411:23:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2435:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "transferAllowances_offset": {
                        "declaration": 9328,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2445:25:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10328,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := transferAllowances_slot\n    offset := transferAllowances_offset\n}",
                  "src": "2393:79:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10330,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2490:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3130",
                            "id": 10331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2498:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "src": "2490:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10333,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2504:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2514:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2504:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2490:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "736176696e6741737365744f7269676e616c416d6f756e74206368616e676564206c6f636174696f6e",
                        "id": 10337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2517:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        },
                        "value": "savingAssetOrignalAmount changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ffb3c2dd41820d50ff8bc9a230304ab322d01cde02bf927b210d84b6f801863",
                          "typeString": "literal_string \"savingAssetOrignalAmount changed location\""
                        }
                      ],
                      "id": 10329,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2481:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2481:80:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10339,
                  "nodeType": "ExpressionStatement",
                  "src": "2481:80:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2614:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hats_slot": {
                        "declaration": 9331,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2621:9:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2631:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hats_offset": {
                        "declaration": 9331,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2641:11:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10340,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := hats_slot\n    offset := hats_offset\n}",
                  "src": "2603:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10344,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10342,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2672:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3131",
                            "id": 10343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2680:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_11_by_1",
                              "typeString": "int_const 11"
                            },
                            "value": "11"
                          },
                          "src": "2672:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10345,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2686:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2696:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2686:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2672:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "68617473206368616e676564206c6f636174696f6e",
                        "id": 10349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2699:23:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8be37b68f7e893f838f6cb121e669c0d2d80ef602a954743c51061143cb586fe",
                          "typeString": "literal_string \"hats changed location\""
                        },
                        "value": "hats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8be37b68f7e893f838f6cb121e669c0d2d80ef602a954743c51061143cb586fe",
                          "typeString": "literal_string \"hats changed location\""
                        }
                      ],
                      "id": 10341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2663:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2663:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10351,
                  "nodeType": "ExpressionStatement",
                  "src": "2663:60:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2780:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accounts_slot": {
                        "declaration": 9335,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "2787:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2801:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accounts_offset": {
                        "declaration": 9335,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "2811:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10352,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := accounts_slot\n    offset := accounts_offset\n}",
                  "src": "2769:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10354,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "2846:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3132",
                            "id": 10355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2854:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_12_by_1",
                              "typeString": "int_const 12"
                            },
                            "value": "12"
                          },
                          "src": "2846:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10357,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "2860:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2870:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2860:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2846:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6163636f756e7473206368616e676564206c6f636174696f6e",
                        "id": 10361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2873:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6f4cc672cb4d99cf4ce280bfa330dab0a36218bcb4ae8da6290167c677778cbb",
                          "typeString": "literal_string \"accounts changed location\""
                        },
                        "value": "accounts changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6f4cc672cb4d99cf4ce280bfa330dab0a36218bcb4ae8da6290167c677778cbb",
                          "typeString": "literal_string \"accounts changed location\""
                        }
                      ],
                      "id": 10353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "2837:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2837:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10363,
                  "nodeType": "ExpressionStatement",
                  "src": "2837:64:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3177:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accountStats_slot": {
                        "declaration": 9339,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3184:17:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3202:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "accountStats_offset": {
                        "declaration": 9339,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "3212:19:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10364,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := accountStats_slot\n    offset := accountStats_offset\n}",
                  "src": "3166:67:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10366,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "3251:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3133",
                            "id": 10367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3259:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_13_by_1",
                              "typeString": "int_const 13"
                            },
                            "value": "13"
                          },
                          "src": "3251:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10369,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "3265:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3275:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3265:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3251:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6163636f756e745374617473206368616e676564206c6f636174696f6e",
                        "id": 10373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3278:31:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c22497b8453de0267775bf013fe1925446d2251fdca2395bd58188b7a284896b",
                          "typeString": "literal_string \"accountStats changed location\""
                        },
                        "value": "accountStats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c22497b8453de0267775bf013fe1925446d2251fdca2395bd58188b7a284896b",
                          "typeString": "literal_string \"accountStats changed location\""
                        }
                      ],
                      "id": 10365,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "3242:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3242:68:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10375,
                  "nodeType": "ExpressionStatement",
                  "src": "3242:68:25"
                },
                {
                  "externalReferences": [
                    {
                      "slot": {
                        "declaration": 10191,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3367:4:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hatStats_slot": {
                        "declaration": 9343,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3374:13:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "offset": {
                        "declaration": 10194,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3388:6:25",
                        "valueSize": 1
                      }
                    },
                    {
                      "hatStats_offset": {
                        "declaration": 9343,
                        "isOffset": true,
                        "isSlot": false,
                        "src": "3398:15:25",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 10376,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    slot := hatStats_slot\n    offset := hatStats_offset\n}",
                  "src": "3356:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10378,
                            "name": "slot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10191,
                            "src": "3433:4:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3134",
                            "id": 10379,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3441:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_14_by_1",
                              "typeString": "int_const 14"
                            },
                            "value": "14"
                          },
                          "src": "3433:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10381,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10194,
                            "src": "3447:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 10382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3457:1:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3447:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3433:25:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6861745374617473206368616e676564206c6f636174696f6e",
                        "id": 10385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3460:27:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36a703975ec46644537900aea28046c436d5c904dac68a108b1f2f9406414b37",
                          "typeString": "literal_string \"hatStats changed location\""
                        },
                        "value": "hatStats changed location"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36a703975ec46644537900aea28046c436d5c904dac68a108b1f2f9406414b37",
                          "typeString": "literal_string \"hatStats changed location\""
                        }
                      ],
                      "id": 10377,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "3424:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3424:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10387,
                  "nodeType": "ExpressionStatement",
                  "src": "3424:64:25"
                }
              ]
            },
            "documentation": null,
            "id": 10389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "217:2:25"
            },
            "returnParameters": {
              "id": 10189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "232:0:25"
            },
            "scope": 10390,
            "src": "200:3295:25",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10391,
        "src": "149:3348:25"
      }
    ],
    "src": "0:3498:25"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.560Z",
  "devdoc": {
    "details": "Test RTokenStorage Layout",
    "methods": {
      "changeAllocationStrategy(address)": {
        "details": "IRToken.changeAllocationStrategy implementation"
      },
      "changeHat(uint256)": {
        "details": "IRToken.changeHat implementation"
      },
      "changeHatFor(address,uint256)": {
        "details": "IRToken.changeHatFor implementation"
      },
      "createHat(address[],uint32[],bool)": {
        "details": "IRToken.createHat implementation"
      },
      "getAccountStats(address)": {
        "details": "IRToken.getAccountStats implementation"
      },
      "getCurrentAllocationStrategy()": {
        "details": "IRToken.changeHatFor implementation"
      },
      "getCurrentSavingStrategy()": {
        "details": "IRToken.getCurrentSavingStrategy implementation"
      },
      "getGlobalStats()": {
        "details": "IRToken.getAccountStats implementation!1"
      },
      "getHatByAddress(address)": {
        "details": "IRToken.getHatByAddress implementation"
      },
      "getHatByID(uint256)": {
        "details": "IRToken.getHatByID implementation"
      },
      "getHatStats(uint256)": {
        "details": "IRToken.getHatStats implementation"
      },
      "getMaximumHatID()": {
        "details": "IRToken.getMaximumHatID implementation"
      },
      "getSavingAssetBalance()": {
        "details": "IRToken.getSavingAssetBalance implementation"
      },
      "interestPayableOf(address)": {
        "details": "IRToken.interestPayableOf implementation"
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "mint(uint256)": {
        "details": "IRToken.mint implementation"
      },
      "mintWithNewHat(uint256,address[],uint32[])": {
        "details": "IRToken.mintWithNewHat implementation"
      },
      "mintWithSelectedHat(uint256,uint256)": {
        "details": "IRToken.mintWithSelectedHat implementation"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "payInterest(address)": {
        "details": "IRToken.payInterest implementation"
      },
      "receivedLoanOf(address)": {
        "details": "IRToken.receivedLoanOf implementation"
      },
      "receivedSavingsOf(address)": {
        "details": "IRToken.receivedSavingsOf implementation"
      },
      "redeem(uint256)": {
        "details": "IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets"
      },
      "redeemAll()": {
        "details": "IRToken.redeemAll implementation"
      },
      "redeemAndTransfer(address,uint256)": {
        "details": "IRToken.redeemAndTransfer implementation"
      },
      "redeemAndTransferAll(address)": {
        "details": "IRToken.redeemAndTransferAll implementation"
      },
      "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."
      },
      "transferAll(address)": {
        "details": "IRToken.transferAll implementation"
      },
      "transferAllFrom(address,address)": {
        "details": "IRToken.transferAllFrom implementation"
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "updateCode(address)": {
        "details": "Update the rToken logic contract code"
      }
    }
  },
  "userdoc": {
    "methods": {
      "allowance(address,address)": {
        "notice": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called."
      },
      "approve(address,uint256)": {
        "notice": "Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event."
      },
      "balanceOf(address)": {
        "notice": "Returns the amount of tokens owned by `account`."
      },
      "initialize(address,string,string,uint256)": {
        "notice": "Create rToken linked with cToken at `cToken_`"
      },
      "transfer(address,uint256)": {
        "notice": "Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event."
      }
    }
  }
}