Overview
Total Supply:
0

Profile Summary
Blockchain:
Mantle (5000)


Decimals:
Contract Source Code Verified (Exact Match)
Contract Name:
Bridge

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 14 Nov 2023 22:36:13 GMT
ILayerZeroEndpoint.sol
@layerzerolabs
lz-evm-v1-0.7
contracts
interfaces
ILayerZeroEndpoint.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_layerZeroEndpoint",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_router",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "msgType",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "nonce",
        "type": "uint64"
      }
    ],
    "name": "SendMsg",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approveTokenSpender",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "name": "bridgeLookup",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      }
    ],
    "name": "forceResumeReceive",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      },
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "name": "gasLookup",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "layerZeroEndpoint",
    "outputs": [
      {
        "internalType": "contract ILayerZeroEndpoint",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "lzReceive",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint8",
        "name": "_functionType",
        "type": "uint8"
      },
      {
        "internalType": "bytes",
        "name": "_toAddress",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "_transferAndCallPayload",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "quoteLayerZeroFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "credits",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "idealBalance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.CreditObj",
        "name": "_c",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "redeemLocal",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "credits",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "idealBalance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.CreditObj",
        "name": "_c",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "redeemLocalCallback",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "router",
    "outputs": [
      {
        "internalType": "contract Router",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "credits",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "idealBalance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.CreditObj",
        "name": "_c",
        "type": "tuple"
      }
    ],
    "name": "sendCredits",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_bridgeAddress",
        "type": "bytes"
      }
    ],
    "name": "setBridge",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_version",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_configType",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_config",
        "type": "bytes"
      }
    ],
    "name": "setConfig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint8",
        "name": "_functionType",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "_gasAmount",
        "type": "uint256"
      }
    ],
    "name": "setGasAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "version",
        "type": "uint16"
      }
    ],
    "name": "setReceiveVersion",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "version",
        "type": "uint16"
      }
    ],
    "name": "setSendVersion",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "enable",
        "type": "bool"
      }
    ],
    "name": "setUseLayerZeroToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "credits",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "idealBalance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.CreditObj",
        "name": "_c",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqReward",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lpFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lkbRemove",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.SwapObj",
        "name": "_s",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "swap",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "useLayerZeroToken",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60c06040523480156200001157600080fd5b50604051620031d3380380620031d3833981016040819052620000349162000125565b60006200004062000104565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038216620000bc5760405162461bcd60e51b8152600401620000b39062000193565b60405180910390fd5b6001600160a01b038116620000e55760405162461bcd60e51b8152600401620000b3906200015c565b6001600160601b0319606092831b8116608052911b1660a052620001dd565b3390565b80516001600160a01b03811681146200012057600080fd5b919050565b6000806040838503121562000138578182fd5b620001438362000108565b9150620001536020840162000108565b90509250929050565b6020808252601f908201527f53746172676174653a205f726f757465722063616e6e6f742062652030783000604082015260600190565b6020808252602a908201527f53746172676174653a205f6c617965725a65726f456e64706f696e742063616e60408201526906e6f74206265203078360b41b606082015260800190565b60805160601c60a05160601c612f6d62000266600039806104ff5280610583528061064a528061071552806107ac528061086452806108fb5280610d795280610fbf5280611172528061122d52806116285250806103e6528061099c5280610a375280610bfd5280610d395280610e7a52806113cc52806117ad52806118795250612f6d6000f3fe6080604052600436106101345760003560e01c80638c7ae0fc116100ab578063c213dc2b1161006f578063c213dc2b14610326578063cbed8b9c14610346578063d7d3c3b914610366578063f2fde38b14610386578063f887ea40146103a6578063fc869108146103bb57610134565b80638c7ae0fc1461029c5780638da5cb5b146102be5780638e3b5d6a146102d357806396aae4af14610300578063be9d40ac1461031357610134565b806310ddb137116100fd57806310ddb137146102015780633cef94b91461022157806342d65a8d1461023457806343b180091461025457806351156e7314610274578063715018a61461028757610134565b80621d356714610139578063024220541461015b57806307968db11461019157806307e0db17146101b35780630a512369146101d3575b600080fd5b34801561014557600080fd5b50610159610154366004611e98565b6103db565b005b34801561016757600080fd5b5061017b61017636600461218e565b61097d565b6040516101889190612be6565b60405180910390f35b34801561019d57600080fd5b506101a661099a565b6040516101889190612705565b3480156101bf57600080fd5b506101596101ce366004611d99565b6109be565b3480156101df57600080fd5b506101f36101ee3660046121c4565b610a9a565b604051610188929190612bef565b34801561020d57600080fd5b5061015961021c366004611d99565b610cc0565b61015961022f3660046120d6565b610d6e565b34801561024057600080fd5b5061015961024f366004611e48565b610e01565b34801561026057600080fd5b5061015961026f366004611e48565b610eea565b610159610282366004611fe2565b610fb4565b34801561029357600080fd5b50610159611051565b3480156102a857600080fd5b506102b16110b5565b6040516101889190612732565b3480156102ca57600080fd5b506101a66110be565b3480156102df57600080fd5b506102f36102ee366004611d99565b6110cd565b604051610188919061273d565b61015961030e366004611db3565b611167565b610159610321366004611f89565b611222565b34801561033257600080fd5b50610159610341366004611d61565b6112de565b34801561035257600080fd5b50610159610361366004611f1d565b611353565b34801561037257600080fd5b50610159610381366004611d21565b611442565b34801561039257600080fd5b506101596103a1366004611d05565b611524565b3480156103b257600080fd5b506101a6611626565b3480156103c757600080fd5b506101596103d6366004612276565b61164a565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461042c5760405162461bcd60e51b815260040161042390612787565b60405180910390fd5b600160008561ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490508351148015610499575061ffff8416600090815260016020526040908190209051610487919061263a565b60405180910390208380519060200120145b6104b55760405162461bcd60e51b815260040161042390612812565b602081015160ff81166001141561061c576000806000806000806000888060200190518101906104e5919061241e565b9750975097509750975097509750506000601483015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a18fa8048e8a8a896040518563ffffffff1660e01b815260040161054f9493929190612bc0565b600060405180830381600087803b15801561056957600080fd5b505af115801561057d573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632f9255558e8e8e8c8c8c888c8b6040518a63ffffffff1660e01b81526004016105dd999897969594939291906129cb565b600060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505050505050505050505050610976565b60ff8116600214156106d45760008060008480602001905181019061064191906122e2565b935093509350507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a18fa804898585856040518563ffffffff1660e01b815260040161069a9493929190612bc0565b600060405180830381600087803b1580156106b457600080fd5b505af11580156106c8573d6000803e3d6000fd5b50505050505050610976565b60ff81166003141561082f57600080600080600080878060200190518101906106fd91906123a6565b965096509650965096509650506000601482015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a18fa8048d8989896040518563ffffffff1660e01b81526004016107659493929190612bc0565b600060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b5050604051630fee425360e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637f72129891506107f1908f908f908f908d908d9089908d908d90600401612968565b600060405180830381600087803b15801561080b57600080fd5b505af115801561081f573d6000803e3d6000fd5b5050505050505050505050610976565b60ff81166004141561097657600080600080600086806020019051810190610857919061232b565b95509550955095509550507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a18fa8048b8787876040518563ffffffff1660e01b81526004016108b49493929190612bc0565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b5050604051630403bce560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250630403bce5915061093e908d908d908d908b908b908a908a90600401612a4e565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b5050505050505050505b5050505050565b600260209081526000928352604080842090915290825290205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6109c6611705565b6001600160a01b03166109d76110be565b6001600160a01b031614610a20576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516307e0db1760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906307e0db1790610a6c9084906004016128c1565b600060405180830381600087803b158015610a8657600080fd5b505af1158015610976573d6000803e3d6000fd5b60408051602080820183526000808352835180850190945260018085529184018290529283929160ff8b161415610b3f5760006040518060c001604052806001815260200160018152602001600181526020016001815260200160018152602001600181525090506001600080600085858f8f8f8f604051602001610b289a99989796959493929190612bfd565b604051602081830303815290604052925050610bec565b60ff8a1660021415610b7a57600260008083604051602001610b649493929190612c78565b6040516020818303038152906040529150610bec565b60ff8a1660031415610ba8576003600080836000808e8e604051602001610b64989796959493929190612ce4565b60ff8a1660041415610bd45760046000808360008d8d604051602001610b649796959493929190612c9f565b60405162461bcd60e51b815260040161042390612849565b6000610bf98c8c88611709565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340a7bb108d3086600360009054906101000a900460ff16866040518663ffffffff1660e01b8152600401610c5e9594939291906128ed565b604080518083038186803b158015610c7557600080fd5b505afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad91906122a3565b9450945050505097509795505050505050565b610cc8611705565b6001600160a01b0316610cd96110be565b6001600160a01b031614610d22576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516310ddb13760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310ddb13790610a6c9084906004016128c1565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610db65760405162461bcd60e51b81526004016104239061288c565b60006004898988888888604051602001610dd69796959493929190612d67565b6040516020818303038152906040529050610df58a600489858561179a565b50505050505050505050565b610e09611705565b6001600160a01b0316610e1a6110be565b6001600160a01b031614610e63576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d90610eb390869086908690600401612941565b600060405180830381600087803b158015610ecd57600080fd5b505af1158015610ee1573d6000803e3d6000fd5b50505050505050565b610ef2611705565b6001600160a01b0316610f036110be565b6001600160a01b031614610f4c576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b61ffff83166000908152600160208190526040909120546002918116156101000260001901160415610f905760405162461bcd60e51b815260040161042390612750565b61ffff83166000908152600160205260409020610fae9083836119f4565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ffc5760405162461bcd60e51b81526004016104239061288c565b8451604051600091611024916001918e918e91908d908d908c908c908c908c90602001612de5565b60405160208183030381529060405290506110438c60018b898561179a565b505050505050505050505050565b611059611705565b6001600160a01b031661106a6110be565b6001600160a01b0316146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b565b60035460ff1681565b6000546001600160a01b031690565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835291929083018282801561115f5780601f106111345761010080835404028352916020019161115f565b820191906000526020600020905b81548152906001019060200180831161114257829003601f168201915b505050505081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111af5760405162461bcd60e51b81526004016104239061288c565b60606000806000806000868060200190518101906111cd9190612533565b9550955095509550955050600384868b8686866040516020016111f69796959493929190612da3565b6040516020818303038152906040529550505050505061121a86600387868561179a565b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461126a5760405162461bcd60e51b81526004016104239061288c565b600060028585846040516020016112849493929190612d42565b604051602081830303815290604052905060006040518060600160405280600081526020016000815260200160405180604001604052806002815260200161060f60f31b8152508152509050610ee187600286848661179a565b6112e6611705565b6001600160a01b03166112f76110be565b6001600160a01b031614611340576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6003805460ff1916911515919091179055565b61135b611705565b6001600160a01b031661136c6110be565b6001600160a01b0316146113b5576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c906114099088908890889088908890600401612b87565b600060405180830381600087803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050505050505050565b61144a611705565b6001600160a01b031661145b6110be565b6001600160a01b0316146114a4576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906114d29085908590600401612719565b602060405180830381600087803b1580156114ec57600080fd5b505af1158015611500573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fae9190611d7d565b61152c611705565b6001600160a01b031661153d6110be565b6001600160a01b031614611586576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b6001600160a01b0381166115cb5760405162461bcd60e51b8152600401808060200182810382526026815260200180612ef26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b611652611705565b6001600160a01b03166116636110be565b6001600160a01b0316146116ac576040805162461bcd60e51b81526020600482018190526024820152600080516020612f18833981519152604482015290519081900360640190fd5b60018260ff16101580156116c4575060048260ff1611155b6116e05760405162461bcd60e51b8152600401610423906127db565b61ffff909216600090815260026020908152604080832060ff90941683529290522055565b3390565b60408082015160140151825161ffff861660009081526002602090815284822060ff8816835290529283205460609384939290916117469161192c565b90506000856020015111801561176457506001600160a01b03821615155b156117835761177c818660200151876040015161198d565b925061178f565b61178c816119c3565b92505b509095945050505050565b60006117a7868685611709565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a14574888306040518363ffffffff1660e01b81526004016117f99291906128d0565b60206040518083038186803b15801561181157600080fd5b505afa158015611825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184991906122c6565b61ffff8816600090815260016020819052604091829020915162c5803160e81b8152920192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163c58031009134916118b8918c9189908c9030908b90600401612aac565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050507f8d3ee0df6a4b7e82a7f20a763f1c6826e6176323e655af64f32318827d2112d4868260405161191b929190612e0f565b60405180910390a150505050505050565b600082820183811015611986576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6040516060906002906119aa9082908790879087906020016126c7565b6040516020818303038152906040529150509392505050565b6040516060906001906119dc90829085906020016126aa565b6040516020818303038152906040529150505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a2a5760008555611a70565b82601f10611a435782800160ff19823516178555611a70565b82800160010185558215611a70579182015b82811115611a70578235825591602001919060010190611a55565b50611a7c929150611a80565b5090565b5b80821115611a7c5760008155600101611a81565b80356119ef81612ea7565b60008083601f840112611ab1578182fd5b5081356001600160401b03811115611ac7578182fd5b602083019150836020828501011115611adf57600080fd5b9250929050565b600082601f830112611af6578081fd5b8135611b09611b0482612e4e565b612e2b565b818152846020838601011115611b1d578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112611b47578081fd5b8151611b55611b0482612e4e565b818152846020838601011115611b69578283fd5b611b7a826020830160208701612e7b565b949350505050565b600060408284031215611b93578081fd5b604051604081018181106001600160401b0382111715611baf57fe5b604052823581526020928301359281019290925250919050565b600060408284031215611bda578081fd5b604051604081018181106001600160401b0382111715611bf657fe5b604052825181526020928301519281019290925250919050565b600060c08284031215611c21578081fd5b60405160c081018181106001600160401b0382111715611c3d57fe5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b600060608284031215611c93578081fd5b604051606081016001600160401b038282108183111715611cb057fe5b8160405282935084358352602085013560208401526040850135915080821115611cd957600080fd5b50611ce685828601611ae6565b6040830152505092915050565b803561ffff811681146119ef57600080fd5b600060208284031215611d16578081fd5b813561198681612ea7565b600080600060608486031215611d35578182fd5b8335611d4081612ea7565b92506020840135611d5081612ea7565b929592945050506040919091013590565b600060208284031215611d72578081fd5b813561198681612ebf565b600060208284031215611d8e578081fd5b815161198681612ebf565b600060208284031215611daa578081fd5b61198682611cf3565b600080600080600060c08688031215611dca578283fd5b611dd386611cf3565b94506020860135611de381612ea7565b9350611df28760408801611b82565b925060808601356001600160401b0380821115611e0d578283fd5b611e1989838a01611c82565b935060a0880135915080821115611e2e578283fd5b50611e3b88828901611ae6565b9150509295509295909350565b600080600060408486031215611e5c578081fd5b611e6584611cf3565b925060208401356001600160401b03811115611e7f578182fd5b611e8b86828701611aa0565b9497909650939450505050565b60008060008060808587031215611ead578182fd5b611eb685611cf3565b935060208501356001600160401b0380821115611ed1578384fd5b611edd88838901611ae6565b945060408701359150611eef82612ecd565b90925060608601359080821115611f04578283fd5b50611f1187828801611ae6565b91505092959194509250565b600080600080600060808688031215611f34578283fd5b611f3d86611cf3565b9450611f4b60208701611cf3565b93506040860135925060608601356001600160401b03811115611f6c578182fd5b611f7888828901611aa0565b969995985093965092949392505050565b600080600080600060c08688031215611fa0578283fd5b611fa986611cf3565b945060208601359350604086013592506060860135611fc781612ea7565b9150611fd68760808801611b82565b90509295509295909350565b60008060008060008060008060008060006101e08c8e031215612003578889fd5b61200c8c611cf3565b9a5060208c0135995060408c0135985061202860608d01611a95565b97506120378d60808e01611b82565b96506120468d60c08e01611c10565b95506001600160401b03806101808e01351115612061578586fd5b6120728e6101808f01358f01611c82565b9550806101a08e01351115612085578485fd5b6120968e6101a08f01358f01611aa0565b90955093506101c08d01358110156120ac578283fd5b506120be8d6101c08e01358e01611aa0565b81935080925050509295989b509295989b9093969950565b60008060008060008060008060006101208a8c0312156120f4578283fd5b6120fd8a611cf3565b985060208a0135975060408a0135965060608a013561211b81612ea7565b955061212a8b60808c01611b82565b945060c08a0135935060e08a01356001600160401b038082111561214c578485fd5b6121588d838e01611aa0565b90955093506101008c0135915080821115612171578283fd5b5061217e8c828d01611c82565b9150509295985092959850929598565b600080604083850312156121a0578182fd5b6121a983611cf3565b915060208301356121b981612ee2565b809150509250929050565b600080600080600080600060a0888a0312156121de578081fd5b6121e788611cf3565b965060208801356121f781612ee2565b955060408801356001600160401b0380821115612212578283fd5b61221e8b838c01611aa0565b909750955060608a0135915080821115612236578283fd5b6122428b838c01611aa0565b909550935060808a013591508082111561225a578283fd5b506122678a828b01611c82565b91505092959891949750929550565b60008060006060848603121561228a578081fd5b61229384611cf3565b92506020840135611d5081612ee2565b600080604083850312156122b5578182fd5b505080516020909101519092909150565b6000602082840312156122d7578081fd5b815161198681612ecd565b60008060008060a085870312156122f7578182fd5b845161230281612ee2565b60208601516040870151919550935091506123208660608701611bc9565b905092959194509250565b60008060008060008060e08789031215612343578384fd5b865161234e81612ee2565b602088015160408901519197509550935061236c8860608901611bc9565b925060a0870151915060c08701516001600160401b0381111561238d578182fd5b61239989828a01611b37565b9150509295509295509295565b6000806000806000806000610100888a0312156123c1578081fd5b87516123cc81612ee2565b602089015160408a0151919850965094506123ea8960608a01611bc9565b935060a0880151925060c0880151915060e08801516001600160401b03811115612412578182fd5b6122678a828b01611b37565b600080600080600080600080888a036101c081121561243b578283fd5b895161244681612ee2565b8099505060208a0151975060408a0151965060608a0151955061246c8b60808c01611bc9565b945060c060bf198201121561247f578283fd5b5060405160c081016001600160401b03828210818311171561249d57fe5b604082815260c08d0151845260e08d015160208501526101008d0151908401526101208c015160608401526101408c015160808401526101608c015160a08401526101808c0151929550808311156124f3578485fd5b6124ff8d848e01611b37565b94506101a08c0151925080831115612515578384fd5b50506125238b828c01611b37565b9150509295985092959890939650565b60008060008060008060c0878903121561254b578384fd5b865161255681612ee2565b809650506020870151945060408701519350606087015192506080870151915060a08701516001600160401b0381111561238d578182fd5b6001600160a01b03169052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526125dd816020860160208601612e7b565b601f01601f19169290920160200192915050565b80518252602090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600080835460018082166000811461265957600181146126705761269f565b60ff198316865260028304607f168601935061269f565b600283048786526020808720875b838110156126975781548a82015290850190820161267e565b505050860193505b509195945050505050565b60f09290921b6001600160f01b0319168252600282015260220190565b600061ffff60f01b8660f01b16825284600283015283602283015282516126f5816042850160208701612e7b565b9190910160420195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261198660208301846125c5565b6020808252601d908201527f53746172676174653a2042726964676520616c72656164792073657421000000604082015260600190565b60208082526034908201527f53746172676174653a206f6e6c79204c617965725a65726f20656e64706f696e604082015273742063616e2063616c6c206c7a5265636569766560601b606082015260800190565b6020808252601f908201527f53746172676174653a20696e76616c6964205f66756e6374696f6e5479706500604082015260600190565b6020808252601f908201527f53746172676174653a2062726964676520646f6573206e6f74206d6174636800604082015260600190565b60208082526023908201527f53746172676174653a20756e737570706f727465642066756e6374696f6e207460408201526279706560e81b606082015260800190565b6020808252818101527f53746172676174653a2063616c6c6572206d75737420626520526f757465722e604082015260600190565b61ffff91909116815260200190565b61ffff9290921682526001600160a01b0316602082015260400190565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061291b908301866125c5565b8415156060840152828103608084015261293581856125c5565b98975050505050505050565b600061ffff851682526040602083015261295f60408301848661259b565b95945050505050565b600061010061ffff8b1683528060208401526129868184018b6125c5565b6001600160401b039990991660408401525050606081019590955260808501939093526001600160a01b039190911660a084015260c083015260e09091015292915050565b60006101c061ffff8c1683528060208401526129e98184018c6125c5565b6001600160401b038b166040850152606084018a90526080840189905260a084018890526001600160a01b03871660c08501529050612a2b60e0840186612600565b8281036101a0840152612a3e81856125c5565b9c9b505050505050505050505050565b600061ffff8916825260e06020830152612a6b60e08301896125c5565b6001600160401b03881660408401528660608401528560808401528460a084015282810360c0840152612a9e81856125c5565b9a9950505050505050505050565b600060c0820161ffff89168352602060c081850152828954600180821660008114612ade5760018114612afd57612b35565b60028304607f16865260ff19831660e089015261010088019350612b35565b60028304808752612b0d8e612e6f565b885b82811015612b2b5781548b820160e00152908401908701612b0f565b8a0160e001955050505b5050508481036040860152612b4a818a6125c5565b92505050612b5b606084018761258e565b612b68608084018661258e565b82810360a0840152612b7a81856125c5565b9998505050505050505050565b600061ffff808816835280871660208401525084604083015260806060830152612bb560808301848661259b565b979650505050505050565b61ffff85168152602081018490526040810183905260a0810161295f60608301846125f1565b90815260200190565b918252602082015260400190565b60006101c060ff8d16835260ff8c16602084015260ff8b16604084015260ff8a166060840152612c30608084018a6125f1565b612c3d60c0840189612600565b80610180840152612c51818401878961259b565b90508281036101a0840152612c6781858761259b565b9d9c50505050505050505050505050565b60ff858116825284811660208301528316604082015260a0810161295f60608301846125f1565b600060ff8916825260ff8816602083015260ff87166040830152612cc660608301876125f1565b60ff851660a083015260e060c0830152612b7a60e08301848661259b565b600061010060ff8b16835260ff8a16602084015260ff89166040840152612d0e60608401896125f1565b60ff871660a084015260ff861660c08401528060e0840152612d33818401858761259b565b9b9a5050505050505050505050565b60ff85168152602081018490526040810183905260a0810161295f60608301846125f1565b600060ff89168252876020830152866040830152612d8860608301876125f1565b8460a083015260e060c0830152612b7a60e08301848661259b565b600061010060ff8a168352886020840152876040840152612dc760608401886125f1565b8560a08401528460c08401528060e0840152612a9e818401856125c5565b60006101c060ff8d1683528b60208401528a6040840152896060840152612c30608084018a6125f1565b60ff9290921682526001600160401b0316602082015260400190565b6040518181016001600160401b0381118282101715612e4657fe5b604052919050565b60006001600160401b03821115612e6157fe5b50601f01601f191660200190565b60009081526020902090565b60005b83811015612e96578181015183820152602001612e7e565b83811115610fae5750506000910152565b6001600160a01b0381168114612ebc57600080fd5b50565b8015158114612ebc57600080fd5b6001600160401b0381168114612ebc57600080fd5b60ff81168114612ebc57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200545d016be5557b8747bf1e04422a9e5442423947b11208ff936922c968a01d164736f6c63430007060033000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd70000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590