{
  "contractName": "rSAI",
  "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": false,
      "inputs": [],
      "name": "updateTokenInfo",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "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\":false,\"inputs\":[],\"name\":\"updateTokenInfo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"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.\"}},\"notice\":\"RToken instantiation for rSAI (Redeemable SAI)\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rSAI.sol\":\"rSAI\"},\"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/tokens/rSAI.sol\":{\"keccak256\":\"0x907769695394fe76d6ef9389d509985ef4b039794d208b1094ba77fb5684c881\",\"urls\":[\"bzz-raw://d8ae8c94471b6f17e1a2d97594ce014873c0966de3665fbd871cb6112758f934\",\"dweb:/ipfs/QmTHRjM5TJpXmDkfnzWi2duHv75soRa3nM1dXAfVF9zQhk\"]},\"@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": "0x60806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3614815806100576000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806370a08231116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b31461074c578063f2fde38b1461076e578063fc0c546a14610781578063fdbbf8ac14610789576103a4565b8063d888479514610708578063db006a751461071e578063dd62ed3e14610731578063e192782b14610744576103a4565b8063c200659e116100e9578063c200659e146106c7578063d007c644146106cf578063d271be3f146106e2578063d3ac25c4146106f5576103a4565b8063bf5bfdfb146106bf578063c034d0db146104f5578063c1a2007d14610431576103a4565b80638f32d59b11610187578063a573fe1f11610156578063a573fe1f14610689578063a9059cbb14610691578063b2bdfa7b146106a4578063b5dbfc1a146106ac576103a4565b80638f32d59b1461065357806395d89b411461065b578063a0712d6814610663578063a3a7e7f314610676576103a4565b806377ede051116101c357806377ede0511461062557806381c8d895146103d257806384d4b410146106385780638da5cb5b1461064b576103a4565b806370a0823114610602578063715018a61461061557806371ee46eb1461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636b4169c3146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b73660046137c4565b61079c565b6040516103c991906143e0565b60405180910390f35b6103da61080f565b6040516103c99190614409565b6103fa6103f53660046137c4565b61081b565b6040516103c9939291906145f1565b61041161084a565b6040516103c99190614425565b6103bc61042c366004613887565b6108d5565b610439610943565b6040516103c9919061434f565b6103da6104543660046137c4565b610953565b6103bc610975565b6103da610985565b61047c610477366004613a0a565b61098b565b6040516103c99291906143bb565b6104926109a1565b6040516103c99190614696565b6103bc6104ad36600461383a565b6109a9565b6104c56104c03660046137c4565b610a01565b6040516103c991906145c6565b6103bc6104e0366004613a0a565b610b52565b6103bc610b97565b6103da610bff565b6103da610c05565b6103bc61050b366004613aaf565b610c0b565b6103da610c60565b61052b6105263660046137c4565b610c6a565b005b61052b61053b366004613887565b610cff565b6103da61054e3660046137c4565b610d56565b61052b610561366004613979565b610d68565b610579610574366004613a0a565b610fa5565b6040516103c991906145e3565b6103da610fe7565b61059661100b565b6040516103c99190614417565b6103da6105b13660046138b7565b61101a565b6105c96105c43660046137c4565b6110d1565b6040516103c995949392919061464a565b6103da6105e8366004613800565b611100565b6105f561111d565b6040516103c991906145d5565b6103da6106103660046137c4565b61114d565b61052b61116b565b6103da6111d9565b6103da6106333660046137c4565b6111df565b6103bc610646366004613800565b611207565b610439611251565b6103bc611260565b610411611271565b6103bc610671366004613a0a565b6112cc565b6103bc6106843660046137c4565b6112e2565b61052b61132d565b6103bc61069f366004613887565b6113b5565b610439611407565b6103bc6106ba366004613a28565b611416565b6103da6114d6565b6103da6114dc565b6103bc6106dd3660046137c4565b6114e2565b6103bc6106f0366004613887565b6114f8565b61052b6107033660046137c4565b611519565b610710611955565b6040516103c992919061462e565b6103bc61072c366004613a0a565b61196a565b6103da61073f366004613800565b61198b565b6103da6119b6565b61075f61075a366004613a0a565b6119bb565b6040516103c99392919061463c565b61052b61077c3660046137c4565b6119dc565b610596611a09565b6103da6107973660046137c4565b611a18565b60018054810190819055600090336107b381611a48565b6001600160a01b0381166000908152600c60205260409020600101546107da908590611bf1565b600192505060015481146108095760405162461bcd60e51b8152600401610800906145a6565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084083611d4b565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061092f908790614409565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061099783611d4b565b9094909350915050565b63ffffffff81565b600180548101908190556000906109bf85611a48565b6109cb33868686611ead565b6109d484611a48565b6001915060015481146109f95760405162461bcd60e51b8152600401610800906145a6565b509392505050565b610a0961345b565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a5e81612129565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a99578354610a9c565b60005b81548110610aa657fe5b90600052602060002090600202019050826000015460001480610acb57508254600019145b15610aec57610ae28460200151856040015161217c565b60e0850152610b4a565b60005b6001820154811015610b4857836003016000836000018381548110610b1057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610aef565b505b505050919050565b60018054810190819055600090610b693384612197565b610b7233611a48565b6001915060015481146108095760405162461bcd60e51b8152600401610800906145a6565b6001805481019081905560009033610bae81611a48565b6001600160a01b0381166000908152600c6020526040902060010154610bd5908290611bf1565b60019250506001548114610bfb5760405162461bcd60e51b8152600401610800906145a6565b5090565b60045481565b60001981565b60018054810190819055600090610c223384612197565b610c2b8461227d565b610c3433611a48565b600191506001548114610c595760405162461bcd60e51b8152600401610800906145a6565b5092915050565b600b546000190190565b610c72611260565b610c8e5760405162461bcd60e51b815260040161080090614536565b600054600160a01b900460ff161515600114610cbc5760405162461bcd60e51b815260040161080090614586565b610cc58161257b565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cf4919061434f565b60405180910390a150565b610d07611260565b610d235760405162461bcd60e51b815260040161080090614536565b610d2c8261264e565b610d485760405162461bcd60e51b8152600401610800906144d6565b610d528282612197565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d925760405162461bcd60e51b8152600401610800906144c6565b610d9a612654565b600080546001600160a01b03191633179055600180558251610dc39060029060208601906134a0565b508151610dd79060039060208501906134a0565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e7991908101906137e2565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f0c9284929091019061351a565b506020828101518051610f25926001850192019061357b565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f97926001600160a01b03909116916143a0565b60405180910390a150505050565b610fad613626565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fdc90612669565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109492918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061270792505050565b915082156110a6576110a63383612197565b60015481146110c75760405162461bcd60e51b8152600401610800906145a6565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b611125613647565b6000611132600854612948565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b611173611260565b61118f5760405162461bcd60e51b815260040161080090614536565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c6020526040812061120081612129565b9392505050565b6001805481019081905560009061121d84611a48565b6001600160a01b0384166000908152600c602052604090206001015461124890339086908690611ead565b610c3483611a48565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b60018054810190819055600090610b698361227d565b60018054810190819055600090336112f981611a48565b6001600160a01b0381166000908152600c602052604090206001015461132490829081908790611ead565b6107da84611a48565b611335611260565b6113515760405162461bcd60e51b815260040161080090614536565b60408051808201909152600e8082526d52656465656d61626c652053414960901b6020909201918252611386916002916134a0565b50604080518082019091526004808252637253414960e01b60209092019182526113b2916003916134a0565b50565b60018054810190819055600090336113cc81611a48565b6113d881828787611ead565b6113e185611a48565b60019250506001548114610c595760405162461bcd60e51b8152600401610800906145a6565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114929290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061270792505050565b905061149e3382612197565b6114a78861227d565b6114b033611a48565b600192505060015481146110c75760405162461bcd60e51b8152600401610800906145a6565b60015481565b60095481565b60018054810190819055600090610b7283611a48565b600180548101908190556000903361150f81611a48565b6113e18585611bf1565b6001805481019081905561152b611260565b6115475760405162461bcd60e51b815260040161080090614536565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115ca91908101906137e2565b6001600160a01b0316146115f05760405162461bcd60e51b815260040161080090614506565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116819190810190613ace565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906116b890309060040161434f565b60206040518083038186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611708919081019061395b565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b39261174092169085906004016143a0565b602060405180830381600087803b15801561175a57600080fd5b505af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611792919081019061393d565b6117ae5760405162461bcd60e51b8152600401610800906144b6565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906117df908590600401614409565b602060405180830381600087803b1580156117f957600080fd5b505af115801561180d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611831919081019061395b565b6006549091506001600160a01b038581169116146118af57836001600160a01b031663f2fde38b611860611251565b6040518263ffffffff1660e01b815260040161187c919061434f565b600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b505050505b60006118bc6008546129a7565b6009549091506118e2836118d6878463ffffffff6129ca16565b9063ffffffff612a0416565b6009556118ee82612a46565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a91611925918c91906143a0565b60405180910390a1505050505050506001548114610d525760405162461bcd60e51b8152600401610800906145a6565b60085460009061196481612948565b91509091565b600180548101908190556000903361198181611a48565b6107da8185611bf1565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b6119e4611260565b611a005760405162461bcd60e51b815260040161080090614536565b6113b281612a68565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c6020526040812060058101548290611a4090612669565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611aa857600080fd5b505af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ae0919081019061393d565b611afc5760405162461bcd60e51b815260040161080090614436565b6000611b0783612129565b90508015611beb578154611b21908263ffffffff612ae916565b82556002830154611b38908263ffffffff612ae916565b60028401556001830154611b52908263ffffffff612ae916565b6001840155600554611b6a908263ffffffff612ae916565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611ba8908490614409565b60405180910390a2836001600160a01b031660006001600160a01b03166000805160206147b383398151915283604051611be29190614409565b60405180910390a35b50505050565b336000908152600c6020526040902081611c1d5760405162461bcd60e51b815260040161080090614556565b8060010154821115611c415760405162461bcd60e51b8152600401610800906144f6565b611c4b3383612b0e565b6001810154611c60908363ffffffff612bca16565b6001820155600554611c78908363ffffffff612bca16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611cad90869086906004016143a0565b602060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cff919081019061393d565b611d1b5760405162461bcd60e51b815260040161080090614516565b60405160009033906000805160206147b383398151915290611d3e908690614409565b60405180910390a3505050565b6060808215801590611d5f57506000198314155b15611e8e57611d6c613661565b600b8481548110611d7957fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611deb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dcd575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e6f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611e325790505b5050505050815250509050806000015192508060200151915050611ea8565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611edf5760405162461bcd60e51b8152600401610800906144e6565b6001600160a01b0383166000908152600c6020526040902060010154811115611f1a5760405162461bcd60e51b815260040161080090614546565b60006001600160a01b038581169085161415611f395750600019611f61565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f815760405162461bcd60e51b815260040161080090614446565b6000611f93828463ffffffff612bca16565b6001600160a01b0386166000908152600c602052604081206001015491925090611fc3908563ffffffff612bca16565b6001600160a01b0386166000908152600c602052604081206001015491925090611ff3908663ffffffff612ae916565b90506000198414612027576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b60006120338887612c0c565b9050612040878783612cbb565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061209657506001600160a01b0387166000908152600c6020526040902054155b80156120bc57506001600160a01b0388166000908152600c602052604090205460001914155b156120e5576001600160a01b0388166000908152600c60205260409020546120e5908890612197565b866001600160a01b0316886001600160a01b03166000805160206147b3833981519152886040516121169190614409565b60405180910390a3505050505050505050565b6000806121398360050154612669565b905061215683600201548460040154612ae990919063ffffffff16565b8111156121725782600201548360040154820303915050610970565b6000915050610970565b60008183101561218e5750600061093d565b5080820361093d565b6000198114806121a85750600b5481105b6121c45760405162461bcd60e51b815260040161080090614486565b6001600160a01b0382166000908152600c602090815260408083208054808552600e9093528184208585529190932060018401541561222a57600061220d878660010154612c0c565b868655600186015490915061222490889083612cbb565b5061222e565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e906122af903390309060040161435d565b60206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122ff919081019061395b565b101561231d5760405162461bcd60e51b815260040161080090614566565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd91612362919030908790600401614378565b602060405180830381600087803b15801561237c57600080fd5b505af1158015612390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123b4919081019061393d565b6123d05760405162461bcd60e51b815260040161080090614516565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926124069291169086906004016143a0565b602060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612458919081019061393d565b6124745760405162461bcd60e51b8152600401610800906144b6565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906124a5908690600401614409565b602060405180830381600087803b1580156124bf57600080fd5b505af11580156124d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124f7919081019061395b565b60055490915061250d908463ffffffff612ae916565b6005556001820154612525908463ffffffff612ae916565b600183015560085461253d908263ffffffff612ae916565b600855600061254b826129a7565b9050612558338583612cbb565b60405133906000906000805160206147b383398151915290611be2908890614409565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125ec919081019061395b565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf71461262a5760405162461bcd60e51b815260040161080090614456565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061093d6009546118d6600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c257600080fd5b505afa1580156126d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126fa919081019061395b565b859063ffffffff6129ca16565b600080600084511161272b5760405162461bcd60e51b8152600401610800906145b6565b60328451111561274d5760405162461bcd60e51b815260040161080090614576565b825184511461276e5760405162461bcd60e51b815260040161080090614476565b506000805b845182101561282457600084838151811061278a57fe5b602002602001015163ffffffff16116127b55760405162461bcd60e51b815260040161080090614596565b60006001600160a01b03168583815181106127cc57fe5b60200260200101516001600160a01b031614156127fb5760405162461bcd60e51b8152600401610800906144a6565b83828151811061280757fe5b602002602001015163ffffffff1681019050816001019150612773565b600091505b835182101561288e578063ffffffff801685848151811061284657fe5b602002602001015163ffffffff16028161285c57fe5b0484838151811061286957fe5b602002602001019063ffffffff16908163ffffffff1681525050816001019150612829565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128f49284929091019061351a565b50602082810151805161290d926001850192019061357b565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061093d670de0b6b3a76400006118d6600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c257600080fd5b600061093d670de0b6b3a76400006118d6600954856129ca90919063ffffffff16565b6000826129d95750600061093d565b828202828482816129e657fe5b04146112005760405162461bcd60e51b815260040161080090614526565b600061120083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f63565b60095460009061093d906118d684670de0b6b3a764000063ffffffff6129ca16565b6001600160a01b038116612a8e5760405162461bcd60e51b815260040161080090614466565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156112005760405162461bcd60e51b815260040161080090614496565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612b3f908590600401614409565b602060405180830381600087803b158015612b5957600080fd5b505af1158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b91919081019061395b565b9050612b9c816129a7565b50612ba78383612f9a565b806008541115612bbf57600880548290039055612bc5565b60006008555b505050565b600061120083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613287565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612c5257600080fd5b505af1158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c8a919081019061393d565b612ca65760405162461bcd60e51b815260040161080090614436565b612caf826132b3565b905061093d8383612f9a565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612cea578254612ced565b60005b81548110612cf757fe5b600091825260208220600290910201805490925015612f145750600084845b6001840154831015612f0d576000600c6000866000018681548110612d3757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612dc25763ffffffff8016612db5886001018881548110612d8857fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff908116906129ca16565b81612dbc57fe5b04612dc4565b845b9050612e10818960030160008a6000018a81548110612ddf57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612ae916565b886003016000896000018981548110612e2557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612e5f908263ffffffff612ae916565b6004840155612e6e858261217c565b9450600082612e9d5763ffffffff8016612e90896001018981548110612d8857fe5b81612e9757fe5b04612e9f565b845b6005850154909150612eb7908263ffffffff612ae916565b6005850155612ec6858261217c565b9450612efe8c896000018981548110612edb57fe5b6000918252602090912001548b546001600160a01b039091169060018686613352565b50505050826001019250612d16565b5050612f5b565b6004830154612f29908663ffffffff612ae916565b60048401556005830154612f43908563ffffffff612ae916565b60058401558254612f5b908790819060018989613352565b505050505050565b60008183612f845760405162461bcd60e51b81526004016108009190614425565b506000838581612f9057fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612fc9578254612fcc565b60005b81548110612fd657fe5b906000526020600020906002020190506000612ffa8360010154846002015461217c565b9050838111156130075750825b6000613012826132b3565b83549091501561321357818160005b600186015481101561320b576000600c600088600001848154811061304257fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130cd5763ffffffff80166130c08a600101868154811061309357fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff908116906129ca16565b816130c757fe5b046130cf565b855b90506130df83600401548261217c565b836004018190555061312a8a60030160008b60000187815481106130ff57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548261217c565b8a60030160008b600001878154811061313f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205561316e868261217c565b955060008261319d5763ffffffff80166131908b600101878154811061309357fe5b8161319757fe5b0461319f565b855b90506131af84600501548261217c565b60058501556131be868261217c565b95506131c984613429565b6131fc8d8b60000187815481106131dc57fe5b60009182526020822001548e546001600160a01b03909116918686613352565b50505050806001019050613021565b505050613256565b61322184600401548361217c565b60048501556005840154613235908261217c565b600585015561324384613429565b6132568687866000015460008686613352565b81851115612f5b576132698286036132b3565b905061327984600501548261217c565b6005850155612f5b84613429565b600081848411156132ab5760405162461bcd60e51b81526004016108009190614425565b505050900390565b600061093d600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561330657600080fd5b505afa15801561331a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061333e919081019061395b565b6009546118d690859063ffffffff6129ca16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d298787876040516133b1939291906143ee565b60405180910390a483156133f85760018101546133d4908463ffffffff612ae916565b600182015560028101546133ee908363ffffffff612ae916565b6002820155613420565b61340681600101548461217c565b6001820155600281015461341a908361217c565b60028201555b50505050505050565b60006134388260050154612669565b90508160040154810382600201541115610d525760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134e157805160ff191683800117855561350e565b8280016001018555821561350e579182015b8281111561350e5782518255916020019190600101906134f3565b50610bfb92915061367b565b82805482825590600052602060002090810192821561356f579160200282015b8281111561356f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061353a565b50610bfb929150613695565b8280548282559060005260206000209060070160089004810192821561361a5791602002820160005b838211156135e857835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026135a4565b80156136185782816101000a81549063ffffffff02191690556004016020816003010492830192600103026135e8565b505b50610bfb9291506136b9565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095091905b80821115610bfb5760008155600101613681565b61095091905b80821115610bfb5780546001600160a01b031916815560010161369b565b61095091905b80821115610bfb57805463ffffffff191681556001016136bf565b803561093d81614783565b805161093d81614783565b60008083601f84011261370257600080fd5b50813567ffffffffffffffff81111561371a57600080fd5b60208301915083602082028301111561373257600080fd5b9250929050565b803561093d81614797565b805161093d81614797565b805161093d816147a0565b803561093d816147a9565b600082601f83011261377657600080fd5b8135613789613784826146cb565b6146a4565b915080825260208301602083018583830111156137a557600080fd5b6137b0838284614741565b50505092915050565b803561093d816147a0565b6000602082840312156137d657600080fd5b6000611a4084846136da565b6000602082840312156137f457600080fd5b6000611a4084846136e5565b6000806040838503121561381357600080fd5b600061381f85856136da565b9250506020613830858286016136da565b9150509250929050565b60008060006060848603121561384f57600080fd5b600061385b86866136da565b935050602061386c868287016136da565b925050604061387d868287016137b9565b9150509250925092565b6000806040838503121561389a57600080fd5b60006138a685856136da565b9250506020613830858286016137b9565b6000806000806000606086880312156138cf57600080fd5b853567ffffffffffffffff8111156138e657600080fd5b6138f2888289016136f0565b9550955050602086013567ffffffffffffffff81111561391157600080fd5b61391d888289016136f0565b9350935050604061393088828901613739565b9150509295509295909350565b60006020828403121561394f57600080fd5b6000611a408484613744565b60006020828403121561396d57600080fd5b6000611a40848461374f565b6000806000806080858703121561398f57600080fd5b600061399b878761375a565b945050602085013567ffffffffffffffff8111156139b857600080fd5b6139c487828801613765565b935050604085013567ffffffffffffffff8111156139e157600080fd5b6139ed87828801613765565b92505060606139fe878288016137b9565b91505092959194509250565b600060208284031215613a1c57600080fd5b6000611a4084846137b9565b600080600080600060608688031215613a4057600080fd5b6000613a4c88886137b9565b955050602086013567ffffffffffffffff811115613a6957600080fd5b613a75888289016136f0565b9450945050604086013567ffffffffffffffff811115613a9457600080fd5b613aa0888289016136f0565b92509250509295509295909350565b60008060408385031215613ac257600080fd5b60006138a685856137b9565b60008060408385031215613ae157600080fd5b6000613aed858561374f565b92505060206138308582860161374f565b6000613b0a8383613b2d565b505060200190565b6000613b0a8383614346565b613b2781614736565b82525050565b613b2781614706565b6000613b41826146f9565b613b4b81856146fd565b9350613b56836146f3565b8060005b83811015613b84578151613b6e8882613afe565b9750613b79836146f3565b925050600101613b5a565b509495945050505050565b6000613b9a826146f9565b613ba481856146fd565b9350613baf836146f3565b8060005b83811015613b84578151613bc78882613b12565b9750613bd2836146f3565b925050600101613bb3565b613b2781614711565b613b2781610950565b613b2781614716565b6000613c03826146f9565b613c0d81856146fd565b9350613c1d81856020860161474d565b613c2681614779565b9093019392505050565b6000613c3d6015836146fd565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613c6e6021836146fd565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613cb1600e836146fd565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613cdb6026836146fd565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613d236020836146fd565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613d5c600e836146fd565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d86601b836146fd565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613dbf6028836146fd565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613e096014836146fd565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613e396029836146fd565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e84602e836146fd565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613ed46018836146fd565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613f0d601c836146fd565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613f466032836146fd565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f9a6015836146fd565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613fcb6021836146fd565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061400e6020836146fd565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000614047601e836146fd565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614080601c836146fd565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b60006140b96014836146fd565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b60006140e96032836146fd565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b600061413d6033836146fd565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614192602f836146fd565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b60006141e3601f836146fd565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b600061421c6023836146fd565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906142668482613be6565b5060208201516142796020850182613be6565b50604082015161428c6040850182613be6565b50606082015161429f6060850182613be6565b5060808201516142b26080850182613be6565b5060a08201516142c560a0850182613be6565b5060c08201516142d860c0850182613be6565b5060e0820151611beb60e0850182613be6565b805160408301906142fc8482613be6565b506020820151611beb6020850182613be6565b805160608301906143208482613be6565b5060208201516143336020850182613be6565b506040820151611beb6040850182613be6565b613b278161472d565b6020810161093d8284613b2d565b6040810161436b8285613b1e565b6112006020830184613b2d565b606081016143868286613b1e565b6143936020830185613b2d565b611a406040830184613be6565b604081016143ae8285613b2d565b6112006020830184613be6565b604080825281016143cc8185613b36565b90508181036020830152611a408184613b8f565b6020810161093d8284613bdd565b606081016143fc8286613bdd565b6143936020830185613be6565b6020810161093d8284613be6565b6020810161093d8284613bef565b602080825281016112008184613bf8565b6020808252810161093d81613c30565b6020808252810161093d81613c61565b6020808252810161093d81613ca4565b6020808252810161093d81613cce565b6020808252810161093d81613d16565b6020808252810161093d81613d4f565b6020808252810161093d81613d79565b6020808252810161093d81613db2565b6020808252810161093d81613dfc565b6020808252810161093d81613e2c565b6020808252810161093d81613e77565b6020808252810161093d81613ec7565b6020808252810161093d81613f00565b6020808252810161093d81613f39565b6020808252810161093d81613f8d565b6020808252810161093d81613fbe565b6020808252810161093d81614001565b6020808252810161093d8161403a565b6020808252810161093d81614073565b6020808252810161093d816140ac565b6020808252810161093d816140dc565b6020808252810161093d81614130565b6020808252810161093d81614185565b6020808252810161093d816141d6565b6020808252810161093d8161420f565b610100810161093d8284614254565b6040810161093d82846142eb565b6060810161093d828461430f565b606081016145ff8286613be6565b81810360208301526146118185613b36565b905081810360408301526146258184613b8f565b95945050505050565b604081016143ae8285613be6565b606081016143fc8286613be6565b60a081016146588288613be6565b6146656020830187613be6565b6146726040830186613be6565b61467f6060830185613be6565b61468c6080830184613be6565b9695505050505050565b6020810161093d8284614346565b60405181810167ffffffffffffffff811182821017156146c357600080fd5b604052919050565b600067ffffffffffffffff8211156146e257600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061093d82614721565b151590565b600061093d82614706565b6001600160a01b031690565b63ffffffff1690565b600061093d82614716565b82818337506000910152565b60005b83811015614768578181015183820152602001614750565b83811115611beb5750506000910152565b601f01601f191690565b61478c81614706565b81146113b257600080fd5b61478c81614711565b61478c81610950565b61478c8161471656feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820b951a2392e9e9ff6bc4dab0e6e2acf3dedcc6dd705b12f3895d92b361fd6b5ba6c6578706572696d656e74616cf564736f6c634300050c0040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103a45760003560e01c806370a08231116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b31461074c578063f2fde38b1461076e578063fc0c546a14610781578063fdbbf8ac14610789576103a4565b8063d888479514610708578063db006a751461071e578063dd62ed3e14610731578063e192782b14610744576103a4565b8063c200659e116100e9578063c200659e146106c7578063d007c644146106cf578063d271be3f146106e2578063d3ac25c4146106f5576103a4565b8063bf5bfdfb146106bf578063c034d0db146104f5578063c1a2007d14610431576103a4565b80638f32d59b11610187578063a573fe1f11610156578063a573fe1f14610689578063a9059cbb14610691578063b2bdfa7b146106a4578063b5dbfc1a146106ac576103a4565b80638f32d59b1461065357806395d89b411461065b578063a0712d6814610663578063a3a7e7f314610676576103a4565b806377ede051116101c357806377ede0511461062557806381c8d895146103d257806384d4b410146106385780638da5cb5b1461064b576103a4565b806370a0823114610602578063715018a61461061557806371ee46eb1461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636b4169c3146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b73660046137c4565b61079c565b6040516103c991906143e0565b60405180910390f35b6103da61080f565b6040516103c99190614409565b6103fa6103f53660046137c4565b61081b565b6040516103c9939291906145f1565b61041161084a565b6040516103c99190614425565b6103bc61042c366004613887565b6108d5565b610439610943565b6040516103c9919061434f565b6103da6104543660046137c4565b610953565b6103bc610975565b6103da610985565b61047c610477366004613a0a565b61098b565b6040516103c99291906143bb565b6104926109a1565b6040516103c99190614696565b6103bc6104ad36600461383a565b6109a9565b6104c56104c03660046137c4565b610a01565b6040516103c991906145c6565b6103bc6104e0366004613a0a565b610b52565b6103bc610b97565b6103da610bff565b6103da610c05565b6103bc61050b366004613aaf565b610c0b565b6103da610c60565b61052b6105263660046137c4565b610c6a565b005b61052b61053b366004613887565b610cff565b6103da61054e3660046137c4565b610d56565b61052b610561366004613979565b610d68565b610579610574366004613a0a565b610fa5565b6040516103c991906145e3565b6103da610fe7565b61059661100b565b6040516103c99190614417565b6103da6105b13660046138b7565b61101a565b6105c96105c43660046137c4565b6110d1565b6040516103c995949392919061464a565b6103da6105e8366004613800565b611100565b6105f561111d565b6040516103c991906145d5565b6103da6106103660046137c4565b61114d565b61052b61116b565b6103da6111d9565b6103da6106333660046137c4565b6111df565b6103bc610646366004613800565b611207565b610439611251565b6103bc611260565b610411611271565b6103bc610671366004613a0a565b6112cc565b6103bc6106843660046137c4565b6112e2565b61052b61132d565b6103bc61069f366004613887565b6113b5565b610439611407565b6103bc6106ba366004613a28565b611416565b6103da6114d6565b6103da6114dc565b6103bc6106dd3660046137c4565b6114e2565b6103bc6106f0366004613887565b6114f8565b61052b6107033660046137c4565b611519565b610710611955565b6040516103c992919061462e565b6103bc61072c366004613a0a565b61196a565b6103da61073f366004613800565b61198b565b6103da6119b6565b61075f61075a366004613a0a565b6119bb565b6040516103c99392919061463c565b61052b61077c3660046137c4565b6119dc565b610596611a09565b6103da6107973660046137c4565b611a18565b60018054810190819055600090336107b381611a48565b6001600160a01b0381166000908152600c60205260409020600101546107da908590611bf1565b600192505060015481146108095760405162461bcd60e51b8152600401610800906145a6565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084083611d4b565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061092f908790614409565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061099783611d4b565b9094909350915050565b63ffffffff81565b600180548101908190556000906109bf85611a48565b6109cb33868686611ead565b6109d484611a48565b6001915060015481146109f95760405162461bcd60e51b8152600401610800906145a6565b509392505050565b610a0961345b565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a5e81612129565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a99578354610a9c565b60005b81548110610aa657fe5b90600052602060002090600202019050826000015460001480610acb57508254600019145b15610aec57610ae28460200151856040015161217c565b60e0850152610b4a565b60005b6001820154811015610b4857836003016000836000018381548110610b1057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610aef565b505b505050919050565b60018054810190819055600090610b693384612197565b610b7233611a48565b6001915060015481146108095760405162461bcd60e51b8152600401610800906145a6565b6001805481019081905560009033610bae81611a48565b6001600160a01b0381166000908152600c6020526040902060010154610bd5908290611bf1565b60019250506001548114610bfb5760405162461bcd60e51b8152600401610800906145a6565b5090565b60045481565b60001981565b60018054810190819055600090610c223384612197565b610c2b8461227d565b610c3433611a48565b600191506001548114610c595760405162461bcd60e51b8152600401610800906145a6565b5092915050565b600b546000190190565b610c72611260565b610c8e5760405162461bcd60e51b815260040161080090614536565b600054600160a01b900460ff161515600114610cbc5760405162461bcd60e51b815260040161080090614586565b610cc58161257b565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cf4919061434f565b60405180910390a150565b610d07611260565b610d235760405162461bcd60e51b815260040161080090614536565b610d2c8261264e565b610d485760405162461bcd60e51b8152600401610800906144d6565b610d528282612197565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d925760405162461bcd60e51b8152600401610800906144c6565b610d9a612654565b600080546001600160a01b03191633179055600180558251610dc39060029060208601906134a0565b508151610dd79060039060208501906134a0565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e7991908101906137e2565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f0c9284929091019061351a565b506020828101518051610f25926001850192019061357b565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f97926001600160a01b03909116916143a0565b60405180910390a150505050565b610fad613626565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fdc90612669565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109492918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061270792505050565b915082156110a6576110a63383612197565b60015481146110c75760405162461bcd60e51b8152600401610800906145a6565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b611125613647565b6000611132600854612948565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b611173611260565b61118f5760405162461bcd60e51b815260040161080090614536565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c6020526040812061120081612129565b9392505050565b6001805481019081905560009061121d84611a48565b6001600160a01b0384166000908152600c602052604090206001015461124890339086908690611ead565b610c3483611a48565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108cd5780601f106108a2576101008083540402835291602001916108cd565b60018054810190819055600090610b698361227d565b60018054810190819055600090336112f981611a48565b6001600160a01b0381166000908152600c602052604090206001015461132490829081908790611ead565b6107da84611a48565b611335611260565b6113515760405162461bcd60e51b815260040161080090614536565b60408051808201909152600e8082526d52656465656d61626c652053414960901b6020909201918252611386916002916134a0565b50604080518082019091526004808252637253414960e01b60209092019182526113b2916003916134a0565b50565b60018054810190819055600090336113cc81611a48565b6113d881828787611ead565b6113e185611a48565b60019250506001548114610c595760405162461bcd60e51b8152600401610800906145a6565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114929290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061270792505050565b905061149e3382612197565b6114a78861227d565b6114b033611a48565b600192505060015481146110c75760405162461bcd60e51b8152600401610800906145a6565b60015481565b60095481565b60018054810190819055600090610b7283611a48565b600180548101908190556000903361150f81611a48565b6113e18585611bf1565b6001805481019081905561152b611260565b6115475760405162461bcd60e51b815260040161080090614536565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115ca91908101906137e2565b6001600160a01b0316146115f05760405162461bcd60e51b815260040161080090614506565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116819190810190613ace565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906116b890309060040161434f565b60206040518083038186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611708919081019061395b565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b39261174092169085906004016143a0565b602060405180830381600087803b15801561175a57600080fd5b505af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611792919081019061393d565b6117ae5760405162461bcd60e51b8152600401610800906144b6565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906117df908590600401614409565b602060405180830381600087803b1580156117f957600080fd5b505af115801561180d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611831919081019061395b565b6006549091506001600160a01b038581169116146118af57836001600160a01b031663f2fde38b611860611251565b6040518263ffffffff1660e01b815260040161187c919061434f565b600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b505050505b60006118bc6008546129a7565b6009549091506118e2836118d6878463ffffffff6129ca16565b9063ffffffff612a0416565b6009556118ee82612a46565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a91611925918c91906143a0565b60405180910390a1505050505050506001548114610d525760405162461bcd60e51b8152600401610800906145a6565b60085460009061196481612948565b91509091565b600180548101908190556000903361198181611a48565b6107da8185611bf1565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b6119e4611260565b611a005760405162461bcd60e51b815260040161080090614536565b6113b281612a68565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c6020526040812060058101548290611a4090612669565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611aa857600080fd5b505af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ae0919081019061393d565b611afc5760405162461bcd60e51b815260040161080090614436565b6000611b0783612129565b90508015611beb578154611b21908263ffffffff612ae916565b82556002830154611b38908263ffffffff612ae916565b60028401556001830154611b52908263ffffffff612ae916565b6001840155600554611b6a908263ffffffff612ae916565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611ba8908490614409565b60405180910390a2836001600160a01b031660006001600160a01b03166000805160206147b383398151915283604051611be29190614409565b60405180910390a35b50505050565b336000908152600c6020526040902081611c1d5760405162461bcd60e51b815260040161080090614556565b8060010154821115611c415760405162461bcd60e51b8152600401610800906144f6565b611c4b3383612b0e565b6001810154611c60908363ffffffff612bca16565b6001820155600554611c78908363ffffffff612bca16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611cad90869086906004016143a0565b602060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cff919081019061393d565b611d1b5760405162461bcd60e51b815260040161080090614516565b60405160009033906000805160206147b383398151915290611d3e908690614409565b60405180910390a3505050565b6060808215801590611d5f57506000198314155b15611e8e57611d6c613661565b600b8481548110611d7957fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611deb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dcd575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e6f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611e325790505b5050505050815250509050806000015192508060200151915050611ea8565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611edf5760405162461bcd60e51b8152600401610800906144e6565b6001600160a01b0383166000908152600c6020526040902060010154811115611f1a5760405162461bcd60e51b815260040161080090614546565b60006001600160a01b038581169085161415611f395750600019611f61565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f815760405162461bcd60e51b815260040161080090614446565b6000611f93828463ffffffff612bca16565b6001600160a01b0386166000908152600c602052604081206001015491925090611fc3908563ffffffff612bca16565b6001600160a01b0386166000908152600c602052604081206001015491925090611ff3908663ffffffff612ae916565b90506000198414612027576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b60006120338887612c0c565b9050612040878783612cbb565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061209657506001600160a01b0387166000908152600c6020526040902054155b80156120bc57506001600160a01b0388166000908152600c602052604090205460001914155b156120e5576001600160a01b0388166000908152600c60205260409020546120e5908890612197565b866001600160a01b0316886001600160a01b03166000805160206147b3833981519152886040516121169190614409565b60405180910390a3505050505050505050565b6000806121398360050154612669565b905061215683600201548460040154612ae990919063ffffffff16565b8111156121725782600201548360040154820303915050610970565b6000915050610970565b60008183101561218e5750600061093d565b5080820361093d565b6000198114806121a85750600b5481105b6121c45760405162461bcd60e51b815260040161080090614486565b6001600160a01b0382166000908152600c602090815260408083208054808552600e9093528184208585529190932060018401541561222a57600061220d878660010154612c0c565b868655600186015490915061222490889083612cbb565b5061222e565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e906122af903390309060040161435d565b60206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122ff919081019061395b565b101561231d5760405162461bcd60e51b815260040161080090614566565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd91612362919030908790600401614378565b602060405180830381600087803b15801561237c57600080fd5b505af1158015612390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123b4919081019061393d565b6123d05760405162461bcd60e51b815260040161080090614516565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926124069291169086906004016143a0565b602060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612458919081019061393d565b6124745760405162461bcd60e51b8152600401610800906144b6565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906124a5908690600401614409565b602060405180830381600087803b1580156124bf57600080fd5b505af11580156124d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124f7919081019061395b565b60055490915061250d908463ffffffff612ae916565b6005556001820154612525908463ffffffff612ae916565b600183015560085461253d908263ffffffff612ae916565b600855600061254b826129a7565b9050612558338583612cbb565b60405133906000906000805160206147b383398151915290611be2908890614409565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125ec919081019061395b565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf71461262a5760405162461bcd60e51b815260040161080090614456565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061093d6009546118d6600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c257600080fd5b505afa1580156126d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126fa919081019061395b565b859063ffffffff6129ca16565b600080600084511161272b5760405162461bcd60e51b8152600401610800906145b6565b60328451111561274d5760405162461bcd60e51b815260040161080090614576565b825184511461276e5760405162461bcd60e51b815260040161080090614476565b506000805b845182101561282457600084838151811061278a57fe5b602002602001015163ffffffff16116127b55760405162461bcd60e51b815260040161080090614596565b60006001600160a01b03168583815181106127cc57fe5b60200260200101516001600160a01b031614156127fb5760405162461bcd60e51b8152600401610800906144a6565b83828151811061280757fe5b602002602001015163ffffffff1681019050816001019150612773565b600091505b835182101561288e578063ffffffff801685848151811061284657fe5b602002602001015163ffffffff16028161285c57fe5b0484838151811061286957fe5b602002602001019063ffffffff16908163ffffffff1681525050816001019150612829565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128f49284929091019061351a565b50602082810151805161290d926001850192019061357b565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061093d670de0b6b3a76400006118d6600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c257600080fd5b600061093d670de0b6b3a76400006118d6600954856129ca90919063ffffffff16565b6000826129d95750600061093d565b828202828482816129e657fe5b04146112005760405162461bcd60e51b815260040161080090614526565b600061120083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f63565b60095460009061093d906118d684670de0b6b3a764000063ffffffff6129ca16565b6001600160a01b038116612a8e5760405162461bcd60e51b815260040161080090614466565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156112005760405162461bcd60e51b815260040161080090614496565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612b3f908590600401614409565b602060405180830381600087803b158015612b5957600080fd5b505af1158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b91919081019061395b565b9050612b9c816129a7565b50612ba78383612f9a565b806008541115612bbf57600880548290039055612bc5565b60006008555b505050565b600061120083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613287565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612c5257600080fd5b505af1158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c8a919081019061393d565b612ca65760405162461bcd60e51b815260040161080090614436565b612caf826132b3565b905061093d8383612f9a565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612cea578254612ced565b60005b81548110612cf757fe5b600091825260208220600290910201805490925015612f145750600084845b6001840154831015612f0d576000600c6000866000018681548110612d3757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612dc25763ffffffff8016612db5886001018881548110612d8857fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff908116906129ca16565b81612dbc57fe5b04612dc4565b845b9050612e10818960030160008a6000018a81548110612ddf57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612ae916565b886003016000896000018981548110612e2557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612e5f908263ffffffff612ae916565b6004840155612e6e858261217c565b9450600082612e9d5763ffffffff8016612e90896001018981548110612d8857fe5b81612e9757fe5b04612e9f565b845b6005850154909150612eb7908263ffffffff612ae916565b6005850155612ec6858261217c565b9450612efe8c896000018981548110612edb57fe5b6000918252602090912001548b546001600160a01b039091169060018686613352565b50505050826001019250612d16565b5050612f5b565b6004830154612f29908663ffffffff612ae916565b60048401556005830154612f43908563ffffffff612ae916565b60058401558254612f5b908790819060018989613352565b505050505050565b60008183612f845760405162461bcd60e51b81526004016108009190614425565b506000838581612f9057fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612fc9578254612fcc565b60005b81548110612fd657fe5b906000526020600020906002020190506000612ffa8360010154846002015461217c565b9050838111156130075750825b6000613012826132b3565b83549091501561321357818160005b600186015481101561320b576000600c600088600001848154811061304257fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130cd5763ffffffff80166130c08a600101868154811061309357fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff908116906129ca16565b816130c757fe5b046130cf565b855b90506130df83600401548261217c565b836004018190555061312a8a60030160008b60000187815481106130ff57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548261217c565b8a60030160008b600001878154811061313f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205561316e868261217c565b955060008261319d5763ffffffff80166131908b600101878154811061309357fe5b8161319757fe5b0461319f565b855b90506131af84600501548261217c565b60058501556131be868261217c565b95506131c984613429565b6131fc8d8b60000187815481106131dc57fe5b60009182526020822001548e546001600160a01b03909116918686613352565b50505050806001019050613021565b505050613256565b61322184600401548361217c565b60048501556005840154613235908261217c565b600585015561324384613429565b6132568687866000015460008686613352565b81851115612f5b576132698286036132b3565b905061327984600501548261217c565b6005850155612f5b84613429565b600081848411156132ab5760405162461bcd60e51b81526004016108009190614425565b505050900390565b600061093d600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561330657600080fd5b505afa15801561331a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061333e919081019061395b565b6009546118d690859063ffffffff6129ca16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d298787876040516133b1939291906143ee565b60405180910390a483156133f85760018101546133d4908463ffffffff612ae916565b600182015560028101546133ee908363ffffffff612ae916565b6002820155613420565b61340681600101548461217c565b6001820155600281015461341a908361217c565b60028201555b50505050505050565b60006134388260050154612669565b90508160040154810382600201541115610d525760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134e157805160ff191683800117855561350e565b8280016001018555821561350e579182015b8281111561350e5782518255916020019190600101906134f3565b50610bfb92915061367b565b82805482825590600052602060002090810192821561356f579160200282015b8281111561356f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061353a565b50610bfb929150613695565b8280548282559060005260206000209060070160089004810192821561361a5791602002820160005b838211156135e857835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026135a4565b80156136185782816101000a81549063ffffffff02191690556004016020816003010492830192600103026135e8565b505b50610bfb9291506136b9565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095091905b80821115610bfb5760008155600101613681565b61095091905b80821115610bfb5780546001600160a01b031916815560010161369b565b61095091905b80821115610bfb57805463ffffffff191681556001016136bf565b803561093d81614783565b805161093d81614783565b60008083601f84011261370257600080fd5b50813567ffffffffffffffff81111561371a57600080fd5b60208301915083602082028301111561373257600080fd5b9250929050565b803561093d81614797565b805161093d81614797565b805161093d816147a0565b803561093d816147a9565b600082601f83011261377657600080fd5b8135613789613784826146cb565b6146a4565b915080825260208301602083018583830111156137a557600080fd5b6137b0838284614741565b50505092915050565b803561093d816147a0565b6000602082840312156137d657600080fd5b6000611a4084846136da565b6000602082840312156137f457600080fd5b6000611a4084846136e5565b6000806040838503121561381357600080fd5b600061381f85856136da565b9250506020613830858286016136da565b9150509250929050565b60008060006060848603121561384f57600080fd5b600061385b86866136da565b935050602061386c868287016136da565b925050604061387d868287016137b9565b9150509250925092565b6000806040838503121561389a57600080fd5b60006138a685856136da565b9250506020613830858286016137b9565b6000806000806000606086880312156138cf57600080fd5b853567ffffffffffffffff8111156138e657600080fd5b6138f2888289016136f0565b9550955050602086013567ffffffffffffffff81111561391157600080fd5b61391d888289016136f0565b9350935050604061393088828901613739565b9150509295509295909350565b60006020828403121561394f57600080fd5b6000611a408484613744565b60006020828403121561396d57600080fd5b6000611a40848461374f565b6000806000806080858703121561398f57600080fd5b600061399b878761375a565b945050602085013567ffffffffffffffff8111156139b857600080fd5b6139c487828801613765565b935050604085013567ffffffffffffffff8111156139e157600080fd5b6139ed87828801613765565b92505060606139fe878288016137b9565b91505092959194509250565b600060208284031215613a1c57600080fd5b6000611a4084846137b9565b600080600080600060608688031215613a4057600080fd5b6000613a4c88886137b9565b955050602086013567ffffffffffffffff811115613a6957600080fd5b613a75888289016136f0565b9450945050604086013567ffffffffffffffff811115613a9457600080fd5b613aa0888289016136f0565b92509250509295509295909350565b60008060408385031215613ac257600080fd5b60006138a685856137b9565b60008060408385031215613ae157600080fd5b6000613aed858561374f565b92505060206138308582860161374f565b6000613b0a8383613b2d565b505060200190565b6000613b0a8383614346565b613b2781614736565b82525050565b613b2781614706565b6000613b41826146f9565b613b4b81856146fd565b9350613b56836146f3565b8060005b83811015613b84578151613b6e8882613afe565b9750613b79836146f3565b925050600101613b5a565b509495945050505050565b6000613b9a826146f9565b613ba481856146fd565b9350613baf836146f3565b8060005b83811015613b84578151613bc78882613b12565b9750613bd2836146f3565b925050600101613bb3565b613b2781614711565b613b2781610950565b613b2781614716565b6000613c03826146f9565b613c0d81856146fd565b9350613c1d81856020860161474d565b613c2681614779565b9093019392505050565b6000613c3d6015836146fd565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613c6e6021836146fd565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613cb1600e836146fd565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613cdb6026836146fd565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613d236020836146fd565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613d5c600e836146fd565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d86601b836146fd565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613dbf6028836146fd565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613e096014836146fd565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613e396029836146fd565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e84602e836146fd565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613ed46018836146fd565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613f0d601c836146fd565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613f466032836146fd565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f9a6015836146fd565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613fcb6021836146fd565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061400e6020836146fd565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000614047601e836146fd565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614080601c836146fd565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b60006140b96014836146fd565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b60006140e96032836146fd565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b600061413d6033836146fd565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614192602f836146fd565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b60006141e3601f836146fd565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b600061421c6023836146fd565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906142668482613be6565b5060208201516142796020850182613be6565b50604082015161428c6040850182613be6565b50606082015161429f6060850182613be6565b5060808201516142b26080850182613be6565b5060a08201516142c560a0850182613be6565b5060c08201516142d860c0850182613be6565b5060e0820151611beb60e0850182613be6565b805160408301906142fc8482613be6565b506020820151611beb6020850182613be6565b805160608301906143208482613be6565b5060208201516143336020850182613be6565b506040820151611beb6040850182613be6565b613b278161472d565b6020810161093d8284613b2d565b6040810161436b8285613b1e565b6112006020830184613b2d565b606081016143868286613b1e565b6143936020830185613b2d565b611a406040830184613be6565b604081016143ae8285613b2d565b6112006020830184613be6565b604080825281016143cc8185613b36565b90508181036020830152611a408184613b8f565b6020810161093d8284613bdd565b606081016143fc8286613bdd565b6143936020830185613be6565b6020810161093d8284613be6565b6020810161093d8284613bef565b602080825281016112008184613bf8565b6020808252810161093d81613c30565b6020808252810161093d81613c61565b6020808252810161093d81613ca4565b6020808252810161093d81613cce565b6020808252810161093d81613d16565b6020808252810161093d81613d4f565b6020808252810161093d81613d79565b6020808252810161093d81613db2565b6020808252810161093d81613dfc565b6020808252810161093d81613e2c565b6020808252810161093d81613e77565b6020808252810161093d81613ec7565b6020808252810161093d81613f00565b6020808252810161093d81613f39565b6020808252810161093d81613f8d565b6020808252810161093d81613fbe565b6020808252810161093d81614001565b6020808252810161093d8161403a565b6020808252810161093d81614073565b6020808252810161093d816140ac565b6020808252810161093d816140dc565b6020808252810161093d81614130565b6020808252810161093d81614185565b6020808252810161093d816141d6565b6020808252810161093d8161420f565b610100810161093d8284614254565b6040810161093d82846142eb565b6060810161093d828461430f565b606081016145ff8286613be6565b81810360208301526146118185613b36565b905081810360408301526146258184613b8f565b95945050505050565b604081016143ae8285613be6565b606081016143fc8286613be6565b60a081016146588288613be6565b6146656020830187613be6565b6146726040830186613be6565b61467f6060830185613be6565b61468c6080830184613be6565b9695505050505050565b6020810161093d8284614346565b60405181810167ffffffffffffffff811182821017156146c357600080fd5b604052919050565b600067ffffffffffffffff8211156146e257600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061093d82614721565b151590565b600061093d82614706565b6001600160a01b031690565b63ffffffff1690565b600061093d82614716565b82818337506000910152565b60005b83811015614768578181015183820152602001614750565b83811115611beb5750506000910152565b601f01601f191690565b61478c81614706565b81146113b257600080fd5b61478c81614711565b61478c81610950565b61478c8161471656feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820b951a2392e9e9ff6bc4dab0e6e2acf3dedcc6dd705b12f3895d92b361fd6b5ba6c6578706572696d656e74616cf564736f6c634300050c0040",
  "sourceMap": "377:161:29:-;;;;;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;377:161:29;;;;;;",
  "deployedSourceMap": "377:161:29:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;377:161:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;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;408:127:29:-;;;:::i;4179:291:19:-;;;;;;;;;:::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;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;408:127:29:-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;480:23:29;;;;;;;;;;;;;-1:-1:-1;;;480:23:29;;;;;;;;;:4;;:23;:::i;:::-;-1:-1:-1;513:15:29;;;;;;;;;;;;;-1:-1:-1;;;513:15:29;;;;;;;;;:6;;:15;:::i;:::-;;408:127::o;4179:291:19:-;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;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;377:161:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;377:161:29;;;-1:-1:-1;377:161:29;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;377:161:29;-1:-1:-1;;;;;377:161:29;;;;;;;;;;;-1:-1:-1;377:161:29;;;;;;;-1:-1:-1;377:161:29;;;-1:-1:-1;377:161:29;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;377:161:29;;;-1:-1:-1;377:161:29;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;377:161:29;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;377:161:29;;;;;;;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;12307:465;;12467:67;12531:2;12526:3;12467:67;;;12567:66;12547:87;;-1:-1;;;12663:2;12654:12;;12647:88;12763:2;12754:12;;12453:319;-1:-1;;12453:319;12781:364;;12941:67;13005:2;13000:3;12941:67;;;-1:-1;;;13021:87;;13136:2;13127:12;;12927:218;-1:-1;;12927:218;13154:465;;13314:67;13378:2;13373:3;13314:67;;;13414:66;13394:87;;-1:-1;;;13510:2;13501:12;;13494:88;13610:2;13601:12;;13300:319;-1:-1;;13300:319;13628:364;;13788:67;13852:2;13847:3;13788:67;;;13888:66;13868:87;;13983:2;13974:12;;13774:218;-1:-1;;13774:218;14001:364;;14161:67;14225:2;14220:3;14161:67;;;-1:-1;;;14241:87;;14356:2;14347:12;;14147:218;-1:-1;;14147:218;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:465;;14907:67;14971:2;14966:3;14907:67;;;15007:66;14987:87;;-1:-1;;;15103:2;15094:12;;15087:88;15203:2;15194:12;;14893:319;-1:-1;;14893:319;15221:364;;15381:67;15445:2;15440:3;15381:67;;;-1:-1;;;15461:87;;15576:2;15567:12;;15367:218;-1:-1;;15367:218;15594:465;;15754:67;15818:2;15813:3;15754:67;;;15854:66;15834:87;;-1:-1;;;15950:2;15941:12;;15934:88;16050:2;16041:12;;15740:319;-1:-1;;15740:319;16068:465;;16228:67;16292:2;16287:3;16228:67;;;16328:66;16308:87;;-1:-1;;;16424:2;16415:12;;16408:88;16524:2;16515:12;;16214:319;-1:-1;;16214:319;16542:364;;16702:67;16766:2;16761:3;16702:67;;;16802:66;16782:87;;16897:2;16888:12;;16688:218;-1:-1;;16688:218;16915:364;;17075:67;17139:2;17134:3;17075:67;;;17175:66;17155:87;;17270:2;17261:12;;17061:218;-1:-1;;17061:218;17288:465;;17448:67;17512:2;17507:3;17448:67;;;17548:66;17528:87;;-1:-1;;;17644:2;17635:12;;17628:88;17744:2;17735:12;;17434:319;-1:-1;;17434:319;17762:364;;17922:67;17986:2;17981:3;17922:67;;;-1:-1;;;18002:87;;18117:2;18108:12;;17908:218;-1:-1;;17908:218;18135:465;;18295:67;18359:2;18354:3;18295:67;;;18395:66;18375:87;;-1:-1;;;18491:2;18482:12;;18475:88;18591:2;18582:12;;18281:319;-1:-1;;18281:319;18609:364;;18769:67;18833:2;18828:3;18769:67;;;18869:66;18849:87;;18964:2;18955:12;;18755:218;-1:-1;;18755:218;18982:364;;19142:67;19206:2;19201:3;19142:67;;;19242:66;19222:87;;19337:2;19328:12;;19128:218;-1:-1;;19128:218;19355:364;;19515:67;19579:2;19574:3;19515:67;;;19615:66;19595:87;;19710:2;19701:12;;19501:218;-1:-1;;19501:218;19728:364;;19888:67;19952:2;19947:3;19888:67;;;-1:-1;;;19968:87;;20083:2;20074:12;;19874:218;-1:-1;;19874:218;20101:465;;20261:67;20325:2;20320:3;20261:67;;;20361:66;20341:87;;-1:-1;;;20457:2;20448:12;;20441:88;20557:2;20548:12;;20247:319;-1:-1;;20247:319;20575:465;;20735:67;20799:2;20794:3;20735:67;;;20835:66;20815:87;;-1:-1;;;20931:2;20922:12;;20915:88;21031:2;21022:12;;20721:319;-1:-1;;20721:319;21049:465;;21209:67;21273:2;21268:3;21209:67;;;21309:66;21289:87;;-1:-1;;;21405:2;21396:12;;21389:88;21505:2;21496:12;;21195:319;-1:-1;;21195:319;21523:364;;21683:67;21747:2;21742:3;21683:67;;;21783:66;21763:87;;21878:2;21869:12;;21669:218;-1:-1;;21669:218;21896:465;;22056:67;22120:2;22115:3;22056:67;;;22156:66;22136:87;;-1:-1;;;22252:2;22243:12;;22236:88;22352:2;22343:12;;22042:319;-1:-1;;22042:319;22454:1474;22683:22;;22615:5;22606:15;;;22711:62;22610:3;22683:22;22711:62;;;22636:143;22855:4;22848:5;22844:16;22838:23;22867:63;22924:4;22919:3;22915:14;22901:12;22867:63;;;22789:147;23014:4;23007:5;23003:16;22997:23;23026:63;23083:4;23078:3;23074:14;23060:12;23026:63;;;22946:149;23169:4;23162:5;23158:16;23152:23;23181:63;23238:4;23233:3;23229:14;23215:12;23181:63;;;23105:145;23334:4;23327:5;23323:16;23317:23;23346:63;23403:4;23398:3;23394:14;23380:12;23346:63;;;23260:155;23500:4;23493:5;23489:16;23483:23;23512:63;23569:4;23564:3;23560:14;23546:12;23512:63;;;23425:156;23668:4;23661:5;23657:16;23651:23;23680:63;23737:4;23732:3;23728:14;23714:12;23680:63;;;23591:158;23832:4;23825:5;23821:16;23815:23;23844:63;23901:4;23896:3;23892:14;23878:12;23844:63;;24010:503;24234:22;;24161:4;24152:14;;;24262:62;24156:3;24234:22;24262:62;;;24181:149;24417:4;24410:5;24406:16;24400:23;24429:63;24486:4;24481:3;24477:14;24463:12;24429:63;;24597:656;24820:22;;24750:4;24741:14;;;24848:62;24745:3;24820:22;24848:62;;;24770:146;24995:4;24988:5;24984:16;24978:23;25007:63;25064:4;25059:3;25055:14;25041:12;25007:63;;;24926:150;25157:4;25150:5;25146:16;25140:23;25169:63;25226:4;25221:3;25217:14;25203:12;25169:63;;25490:100;25561:23;25578:5;25561:23;;25714:213;25832:2;25817:18;;25846:71;25821:9;25890:6;25846:71;;25934:340;26088:2;26073:18;;26102:79;26077:9;26154:6;26102:79;;;26192:72;26260:2;26249:9;26245:18;26236:6;26192:72;;26281:451;26463:2;26448:18;;26477:79;26452:9;26529:6;26477:79;;;26567:72;26635:2;26624:9;26620:18;26611:6;26567:72;;;26650;26718:2;26707:9;26703:18;26694:6;26650:72;;26739:324;26885:2;26870:18;;26899:71;26874:9;26943:6;26899:71;;;26981:72;27049:2;27038:9;27034:18;27025:6;26981:72;;27070:616;27314:2;27328:47;;;27299:18;;27389:108;27299:18;27483:6;27389:108;;;27381:116;;27545:9;27539:4;27535:20;27530:2;27519:9;27515:18;27508:48;27570:106;27671:4;27662:6;27570:106;;27693:201;27805:2;27790:18;;27819:65;27794:9;27857:6;27819:65;;27901:423;28069:2;28054:18;;28083:65;28058:9;28121:6;28083:65;;;28159:72;28227:2;28216:9;28212:18;28203:6;28159:72;;28331:213;28449:2;28434:18;;28463:71;28438:9;28507:6;28463:71;;28551:269;28697:2;28682:18;;28711:99;28686:9;28783:6;28711:99;;29079:293;29213:2;29227:47;;;29198:18;;29288:74;29198:18;29348:6;29288:74;;29687:407;29878:2;29892:47;;;29863:18;;29953:131;29863:18;29953:131;;30101:407;30292:2;30306:47;;;30277:18;;30367:131;30277:18;30367:131;;30515:407;30706:2;30720:47;;;30691:18;;30781:131;30691:18;30781:131;;30929:407;31120:2;31134:47;;;31105:18;;31195:131;31105:18;31195:131;;31343:407;31534:2;31548:47;;;31519:18;;31609:131;31519:18;31609:131;;31757:407;31948:2;31962:47;;;31933:18;;32023:131;31933:18;32023:131;;32171:407;32362:2;32376:47;;;32347:18;;32437:131;32347:18;32437:131;;32585:407;32776:2;32790:47;;;32761:18;;32851:131;32761:18;32851:131;;32999:407;33190:2;33204:47;;;33175:18;;33265:131;33175:18;33265:131;;33413:407;33604:2;33618:47;;;33589:18;;33679:131;33589:18;33679:131;;33827:407;34018:2;34032:47;;;34003:18;;34093:131;34003:18;34093:131;;34241:407;34432:2;34446:47;;;34417:18;;34507:131;34417:18;34507:131;;34655:407;34846:2;34860:47;;;34831:18;;34921:131;34831:18;34921:131;;35069:407;35260:2;35274:47;;;35245:18;;35335:131;35245:18;35335:131;;35483:407;35674:2;35688:47;;;35659:18;;35749:131;35659:18;35749:131;;35897:407;36088:2;36102:47;;;36073:18;;36163:131;36073:18;36163:131;;36311:407;36502:2;36516:47;;;36487:18;;36577:131;36487:18;36577:131;;36725:407;36916:2;36930:47;;;36901:18;;36991:131;36901:18;36991:131;;37139:407;37330:2;37344:47;;;37315:18;;37405:131;37315:18;37405:131;;37553:407;37744:2;37758:47;;;37729:18;;37819:131;37729:18;37819:131;;37967:407;38158:2;38172:47;;;38143:18;;38233:131;38143:18;38233:131;;38381:407;38572:2;38586:47;;;38557:18;;38647:131;38557:18;38647:131;;38795:407;38986:2;39000:47;;;38971:18;;39061:131;38971:18;39061:131;;39209:407;39400:2;39414:47;;;39385:18;;39475:131;39385:18;39475:131;;39623:407;39814:2;39828:47;;;39799:18;;39889:131;39799:18;39889:131;;40037:350;40223:3;40208:19;;40238:139;40212:9;40350:6;40238:139;;40394:329;40570:2;40555:18;;40584:129;40559:9;40686:6;40584:129;;40730:333;40908:2;40893:18;;40922:131;40897:9;41026:6;40922:131;;41290:727;41562:2;41547:18;;41576:71;41551:9;41620:6;41576:71;;;41695:9;41689:4;41685:20;41680:2;41669:9;41665:18;41658:48;41720:108;41823:4;41814:6;41720:108;;;41712:116;;41876:9;41870:4;41866:20;41861:2;41850:9;41846:18;41839:48;41901:106;42002:4;41993:6;41901:106;;;41893:114;41533:484;-1:-1;;;;;41533:484;42024:324;42170:2;42155:18;;42184:71;42159:9;42228:6;42184:71;;42355:435;42529:2;42514:18;;42543:71;42518:9;42587:6;42543:71;;42797:659;43027:3;43012:19;;43042:71;43016:9;43086:6;43042:71;;;43124:72;43192:2;43181:9;43177:18;43168:6;43124:72;;;43207;43275:2;43264:9;43260:18;43251:6;43207:72;;;43290;43358:2;43347:9;43343:18;43334:6;43290:72;;;43373:73;43441:3;43430:9;43426:19;43417:6;43373:73;;;42998:458;;;;;;;;;43463:209;43579:2;43564:18;;43593:69;43568:9;43635:6;43593:69;;43679:256;43741:2;43735:9;43767:17;;;43842:18;43827:34;;43863:22;;;43824:62;43821:2;;;43899:1;43896;43889:12;43821:2;43915;43908:22;43719:216;;-1:-1;43719:216;43942:322;;44086:18;44078:6;44075:30;44072:2;;;44118:1;44115;44108:12;44072:2;-1:-1;44249:4;44185;44162:17;;;;-1:-1;;44158:33;44239:15;;44009:255;44271:151;44395:4;44386:14;;44343:79;44586:137;44689:12;;44660:63;45357:178;45475:19;;;45524:4;45515:14;;45468:67;45901:91;;45963:24;45981:5;45963:24;;45999:85;46065:13;46058:21;;46041:43;46170:119;;46260:24;46278:5;46260:24;;46296:121;-1:-1;;;;;46358:54;;46341:76;46503:88;46575:10;46564:22;;46547:44;46598:129;;46685:37;46716:5;46685:37;;47596:145;47677:6;47672:3;47667;47654:30;-1:-1;47733:1;47715:16;;47708:27;47647:94;47750:268;47815:1;47822:101;47836:6;47833:1;47830:13;47822:101;;;47903:11;;;47897:18;47884:11;;;47877:39;47858:2;47851:10;47822:101;;;47938:6;47935:1;47932:13;47929:2;;;-1:-1;;48003:1;47985:16;;47978:27;47799:219;48026:97;48114:2;48094:14;-1:-1;;48090:28;;48074:49;48131:117;48200:24;48218:5;48200:24;;;48193:5;48190:35;48180:2;;48239:1;48236;48229:12;48255:111;48321:21;48336:5;48321:21;;48373:117;48442:24;48460:5;48442:24;;48497:173;48594:52;48640:5;48594:52;",
  "source": "/**\n * Because the use of ABIEncoderV2 , the pragma should be locked above 0.5.10 ,\n * as there is a known bug in array storage:\n * https://blog.ethereum.org/2019/06/25/solidity-storage-array-bugs/\n */\npragma solidity >=0.5.10 <0.6.0;\npragma experimental ABIEncoderV2;\n\nimport { RToken } from \"../RToken.sol\";\n\n/**\n * @notice RToken instantiation for rSAI (Redeemable SAI)\n */\ncontract rSAI is RToken {\n\n    function updateTokenInfo()\n        external\n        onlyOwner {\n        name = \"Redeemable SAI\";\n        symbol = \"rSAI\";\n    }\n\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rSAI.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rSAI.sol",
    "exportedSymbols": {
      "rSAI": [
        10452
      ]
    },
    "id": 10453,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10432,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:29"
      },
      {
        "id": 10433,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:29"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10435,
        "nodeType": "ImportDirective",
        "scope": 10453,
        "sourceUnit": 9288,
        "src": "270:39:29",
        "symbolAliases": [
          {
            "foreign": 10434,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10436,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "394:6:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10437,
            "nodeType": "InheritanceSpecifier",
            "src": "394:6:29"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken instantiation for rSAI (Redeemable SAI)",
        "fullyImplemented": true,
        "id": 10452,
        "linearizedBaseContracts": [
          10452,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "rSAI",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10450,
              "nodeType": "Block",
              "src": "470:65:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10442,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9308,
                      "src": "480:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "52656465656d61626c6520534149",
                      "id": 10443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "487:16:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_682c0622f2d2ef942e02685100ef191c75f5ba8797db14f8ac66848ae6607510",
                        "typeString": "literal_string \"Redeemable SAI\""
                      },
                      "value": "Redeemable SAI"
                    },
                    "src": "480:23:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 10445,
                  "nodeType": "ExpressionStatement",
                  "src": "480:23:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10446,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "513:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "72534149",
                      "id": 10447,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "522:6:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_2aeb0aa7d6cd164d6e7d74e2fa7507085e8be873b7c9c2a611dd9ff41b4407f3",
                        "typeString": "literal_string \"rSAI\""
                      },
                      "value": "rSAI"
                    },
                    "src": "513:15:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 10449,
                  "nodeType": "ExpressionStatement",
                  "src": "513:15:29"
                }
              ]
            },
            "documentation": null,
            "id": 10451,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 10440,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 10439,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "460:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "460:9:29"
              }
            ],
            "name": "updateTokenInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "432:2:29"
            },
            "returnParameters": {
              "id": 10441,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "470:0:29"
            },
            "scope": 10452,
            "src": "408:127:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 10453,
        "src": "377:161:29"
      }
    ],
    "src": "202:337:29"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rSAI.sol",
    "exportedSymbols": {
      "rSAI": [
        10452
      ]
    },
    "id": 10453,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10432,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:29"
      },
      {
        "id": 10433,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:29"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10435,
        "nodeType": "ImportDirective",
        "scope": 10453,
        "sourceUnit": 9288,
        "src": "270:39:29",
        "symbolAliases": [
          {
            "foreign": 10434,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10436,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "394:6:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10437,
            "nodeType": "InheritanceSpecifier",
            "src": "394:6:29"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken instantiation for rSAI (Redeemable SAI)",
        "fullyImplemented": true,
        "id": 10452,
        "linearizedBaseContracts": [
          10452,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "rSAI",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10450,
              "nodeType": "Block",
              "src": "470:65:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10442,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9308,
                      "src": "480:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "52656465656d61626c6520534149",
                      "id": 10443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "487:16:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_682c0622f2d2ef942e02685100ef191c75f5ba8797db14f8ac66848ae6607510",
                        "typeString": "literal_string \"Redeemable SAI\""
                      },
                      "value": "Redeemable SAI"
                    },
                    "src": "480:23:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 10445,
                  "nodeType": "ExpressionStatement",
                  "src": "480:23:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10446,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "513:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "72534149",
                      "id": 10447,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "522:6:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_2aeb0aa7d6cd164d6e7d74e2fa7507085e8be873b7c9c2a611dd9ff41b4407f3",
                        "typeString": "literal_string \"rSAI\""
                      },
                      "value": "rSAI"
                    },
                    "src": "513:15:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 10449,
                  "nodeType": "ExpressionStatement",
                  "src": "513:15:29"
                }
              ]
            },
            "documentation": null,
            "id": 10451,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 10440,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 10439,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "460:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "460:9:29"
              }
            ],
            "name": "updateTokenInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "432:2:29"
            },
            "returnParameters": {
              "id": 10441,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "470:0:29"
            },
            "scope": 10452,
            "src": "408:127:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 10453,
        "src": "377:161:29"
      }
    ],
    "src": "202:337:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.566Z",
  "devdoc": {
    "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."
      }
    },
    "notice": "RToken instantiation for rSAI (Redeemable SAI)"
  }
}