{
  "_format": "hh-sol-artifact-1",
  "contractName": "LZEndpointMock",
  "sourceName": "contracts/mocks/LZEndpointMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "srcAddress",
          "type": "bytes"
        }
      ],
      "name": "ForceResumeReceive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "version",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "configType",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "config",
          "type": "bytes"
        }
      ],
      "name": "SetConfig",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_a",
          "type": "address"
        }
      ],
      "name": "addrToPackedBytes",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "estimateFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [],
      "name": "getChainId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "getConfig",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_chainID",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "getInboundNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_chainID",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "_srcAddress",
          "type": "address"
        }
      ],
      "name": "getOutboundNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getReceiveLibraryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getReceiveVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSendLibraryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSendVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "hasStoredPayload",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "inboundNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isReceivingPayload",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isSendingPayload",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lzEndpointLookup",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockBlockConfirmations",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockChainId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockLayerZeroVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockLibraryVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockOracle",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockReceiveVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockRelayer",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockSendVersion",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mockStaticNativeFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "outboundNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_b",
          "type": "bytes"
        }
      ],
      "name": "packedBytesToAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_destAddr",
          "type": "address"
        },
        {
          "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": "receiveAndForward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_dstAddress",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_gasLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "receivePayload",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "retryPayload",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_destination",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "dstGas",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "payable",
      "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": "address",
          "name": "destAddr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lzEndpointAddr",
          "type": "address"
        }
      ],
      "name": "setDestLzEndpoint",
      "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405161155838038061155883398101604081905261002f9161005b565b602a60055560068054600161ffff19918216811790925581541661ffff92909216919091179055610084565b60006020828403121561006c578081fd5b815161ffff8116811461007d578182fd5b9392505050565b6114c5806100936000396000f3fe6080604052600436106102045760003560e01c80639c729da111610118578063cbed8b9c116100a0578063df6ffbe91161006f578063df6ffbe914610575578063e961a95214610595578063e97a448a14610516578063f5ecbdbc146105aa578063fdc07c70146105ca57610204565b8063cbed8b9c1461052b578063da1a7c9a14610256578063dab312771461054b578063db14f3051461056057610204565b8063c08f15a1116100e7578063c08f15a1146104a3578063c2fa4813146104c3578063c5803100146104e3578063c81b383a146104f6578063ca066b351461051657610204565b80639c729da1146103e1578063aaff5f161461044e578063b12107701461046e578063b20864991461048357610204565b806340a7bb101161019b5780635b3011351161016a5780635b3011351461039f5780636e8c6158146103cc57806371ba2fd6146103e15780637a145748146104015780639924d33b1461042e57610204565b806340a7bb101461031a57806342d65a8d146103485780634f055b04146103685780635952c4ec1461037d57610204565b80630eaf6ea6116101d75780630eaf6ea6146102a357806310ddb137146102d05780632ef25ea7146102f05780633408e4701461030557610204565b806305bc710f1461020957806307e0db1714610234578063096568f61461025657806309eddf5414610276575b600080fd5b34801561021557600080fd5b5061021e6105ea565b60405161022b9190611366565b60405180910390f35b34801561024057600080fd5b5061025461024f366004610d6b565b6105f4565b005b34801561026257600080fd5b5061021e610271366004610c3d565b610618565b34801561028257600080fd5b50610296610291366004610d2c565b610620565b60405161022b9190611224565b3480156102af57600080fd5b506102c36102be366004610e48565b61063d565b60405161022b9190611295565b3480156102dc57600080fd5b506102546102eb366004610d6b565b610646565b3480156102fc57600080fd5b5061021e610666565b34801561031157600080fd5b5061021e610678565b34801561032657600080fd5b5061033a610335366004610da0565b610682565b60405161022b929190611425565b34801561035457600080fd5b50610254610363366004610e48565b610693565b34801561037457600080fd5b506102966106d3565b34801561038957600080fd5b506103926106e2565b60405161022b919061141c565b3480156103ab57600080fd5b506103bf6103ba366004610c3d565b6106e8565b60405161022b91906112a0565b3480156103d857600080fd5b5061021e610714565b3480156103ed57600080fd5b506102966103fc366004610c3d565b610724565b34801561040d57600080fd5b5061042161041c366004610d85565b610729565b60405161022b9190611433565b34801561043a57600080fd5b50610421610449366004611089565b610760565b34801561045a57600080fd5b50610254610469366004610f44565b610797565b34801561047a57600080fd5b5061021e61079e565b34801561048f57600080fd5b5061042161049e366004610d85565b6107a8565b3480156104af57600080fd5b506102546104be366004610c60565b6107ce565b3480156104cf57600080fd5b506102546104de366004610e98565b6107fc565b6102546104f1366004610fc1565b610806565b34801561050257600080fd5b50610296610511366004610c3d565b610a0d565b34801561052257600080fd5b506102c3610a28565b34801561053757600080fd5b50610254610546366004611120565b610a2d565b34801561055757600080fd5b50610296610a70565b34801561056c57600080fd5b5061021e610a85565b34801561058157600080fd5b50610254610590366004610c98565b610a8f565b3480156105a157600080fd5b50610392610af8565b3480156105b657600080fd5b506103bf6105c53660046110d4565b610afe565b3480156105d657600080fd5b506104216105e5366004610e48565b610b15565b60045461ffff1681565b6006805461ffff9092166401000000000265ffff0000000019909216919091179055565b60015b919050565b600080604051600284016002860382376009190151949350505050565b60019392505050565b6006805461ffff909216620100000263ffff000019909216919091179055565b600654640100000000900461ffff1681565b60015461ffff1690565b600554600097509795505050505050565b7f2514d58bc984f8563a7898bbee3c5e55ce79da869880e45dee5d34e012d4cb908383836040516106c693929190611375565b60405180910390a1505050565b6002546001600160a01b031681565b60035481565b60606000826040516020016106fd91906111db565b60408051808303601f190181529190529392505050565b60065462010000900461ffff1681565b503090565b61ffff821660009081526008602090815260408083206001600160a01b03851684529091529020546001600160401b031692915050565b600760209081526000928352604090922081518083018401805192815290840192909301919091209152546001600160401b031681565b5050505050565b60065461ffff1681565b60086020908152600092835260408084209091529082529020546001600160401b031681565b6001600160a01b03918216600090815260208190526040902080546001600160a01b03191691909216179055565b5050505050505050565b60006108128888610620565b6001600160a01b0380821660009081526020819052604090205491925016806108565760405162461bcd60e51b815260040161084d906112b3565b60405180910390fd5b61ffff8a1660009081526008602090815260408083203384529091529020805467ffffffffffffffff19811660016001600160401b039283160191821617909155604284015160568501516001600160a01b0381167390f79bf6eb2c4f870365e785982e1f101e93b90614156108ff57816101c5146108e75760405162461bcd60e51b815260040161084d9061133f565b60405162461bcd60e51b815260040161084d90611310565b5050600061090c336106e8565b905081600760008e61ffff1661ffff1681526020019081526020016000203360405160200161093b91906111db565b60408051601f198184030181529082905261095591611208565b908152602001604051809103902060006101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b031663df6ffbe985600160009054906101000a900461ffff1684868e8e6040518763ffffffff1660e01b81526004016109cd96959493929190611238565b600060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b50505050505050505050505050505050565b6000602081905290815260409020546001600160a01b031681565b600090565b7fd9d5727079da3cec229a1d8fc369b10d1067711929cde4789beee46c1cce115984848484604051610a6294939291906113e5565b60405180910390a150505050565b6001546201000090046001600160a01b031681565b60015461ffff1681565b604051621d356760e01b81526001600160a01b03861690621d356790610abf90879087908790879060040161139c565b600060405180830381600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050505050505050565b60055481565b604080516020810190915260008152949350505050565b61ffff83166000908152600760205260408082209051610b3890859085906111f8565b908152604051908190036020019020546001600160401b031690509392505050565b60008083601f840112610b6b578182fd5b5081356001600160401b03811115610b81578182fd5b602083019150836020828501011115610b9957600080fd5b9250929050565b600082601f830112610bb0578081fd5b81356001600160401b0380821115610bc457fe5b604051601f8301601f191681016020018281118282101715610be257fe5b604052828152848301602001861015610bf9578384fd5b82602086016020830137918201602001929092529392505050565b803561ffff8116811461061b57600080fd5b80356001600160401b038116811461061b57600080fd5b600060208284031215610c4e578081fd5b8135610c5981611477565b9392505050565b60008060408385031215610c72578081fd5b8235610c7d81611477565b91506020830135610c8d81611477565b809150509250929050565b600080600080600060a08688031215610caf578081fd5b8535610cba81611477565b9450610cc860208701610c14565b935060408601356001600160401b0380821115610ce3578283fd5b610cef89838a01610ba0565b9450610cfd60608901610c26565b93506080880135915080821115610d12578283fd5b50610d1f88828901610ba0565b9150509295509295909350565b60008060208385031215610d3e578182fd5b82356001600160401b03811115610d53578283fd5b610d5f85828601610b5a565b90969095509350505050565b600060208284031215610d7c578081fd5b610c5982610c14565b60008060408385031215610d97578182fd5b610c7d83610c14565b600080600080600080600060a0888a031215610dba578182fd5b610dc388610c14565b96506020880135610dd381611477565b955060408801356001600160401b0380821115610dee578384fd5b610dfa8b838c01610b5a565b909750955060608a013591508115158214610e13578384fd5b90935060808901359080821115610e28578384fd5b50610e358a828b01610b5a565b989b979a50959850939692959293505050565b600080600060408486031215610e5c578283fd5b610e6584610c14565b925060208401356001600160401b03811115610e7f578283fd5b610e8b86828701610b5a565b9497909650939450505050565b60008060008060008060008060c0898b031215610eb3578081fd5b610ebc89610c14565b975060208901356001600160401b0380821115610ed7578283fd5b610ee38c838d01610b5a565b909950975060408b01359150610ef882611477565b819650610f0760608c01610c26565b955060808b0135945060a08b0135915080821115610f23578283fd5b50610f308b828c01610b5a565b999c989b5096995094979396929594505050565b600080600080600060608688031215610f5b578081fd5b610f6486610c14565b945060208601356001600160401b0380821115610f7f578283fd5b610f8b89838a01610b5a565b90965094506040880135915080821115610fa3578283fd5b50610fb088828901610b5a565b969995985093965092949392505050565b60008060008060008060008060c0898b031215610fdc578182fd5b610fe589610c14565b975060208901356001600160401b0380821115611000578384fd5b61100c8c838d01610b5a565b909950975060408b0135915080821115611024578384fd5b6110308c838d01610b5a565b909750955060608b0135915061104582611477565b90935060808a01359061105782611477565b90925060a08a0135908082111561106c578283fd5b506110798b828c01610ba0565b9150509295985092959890939650565b6000806040838503121561109b578182fd5b6110a483610c14565b915060208301356001600160401b038111156110be578182fd5b6110ca85828601610ba0565b9150509250929050565b600080600080608085870312156110e9578182fd5b6110f285610c14565b935061110060208601610c14565b9250604085013561111081611477565b9396929550929360600135925050565b60008060008060808587031215611135578182fd5b61113e85610c14565b935061114c60208601610c14565b92506040850135915060608501356001600160401b0381111561116d578182fd5b61117987828801610ba0565b91505092959194509250565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526111c7816020860160208601611447565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6000828483379101908152919050565b6000825161121a818460208701611447565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038716815261ffff8616602082015260a060408201819052600090611266908301876111af565b6001600160401b03861660608401528281036080840152611288818587611185565b9998505050505050505050565b901515815260200190565b600060208252610c5960208301846111af565b60208082526037908201527f4c617965725a65726f4d6f636b3a2064657374696e6174696f6e204c6179657260408201527f5a65726f20456e64706f696e74206e6f7420666f756e64000000000000000000606082015260800190565b6020808252601590820152744e6174697665476173506172616d7320636865636b60581b604082015260600190565b6020808252600d908201526c11d85cc81a5b98dbdc9c9958dd609a1b604082015260600190565b61ffff91909116815260200190565b600061ffff8516825260406020830152611393604083018486611185565b95945050505050565b600061ffff86168252608060208301526113b960808301866111af565b6001600160401b038516604084015282810360608401526113da81856111af565b979650505050505050565b600061ffff80871683528086166020840152508360408301526080606083015261141260808301846111af565b9695505050505050565b90815260200190565b918252602082015260400190565b6001600160401b0391909116815260200190565b60005b8381101561146257818101518382015260200161144a565b83811115611471576000848401525b50505050565b6001600160a01b038116811461148c57600080fd5b5056fea2646970667358221220a7f9ad271ce28a579ced4d474f6eb5eeb380bcee81bc0c7a9ca7dc5a51dc5ed564736f6c63430007060033",
  "deployedBytecode": "0x6080604052600436106102045760003560e01c80639c729da111610118578063cbed8b9c116100a0578063df6ffbe91161006f578063df6ffbe914610575578063e961a95214610595578063e97a448a14610516578063f5ecbdbc146105aa578063fdc07c70146105ca57610204565b8063cbed8b9c1461052b578063da1a7c9a14610256578063dab312771461054b578063db14f3051461056057610204565b8063c08f15a1116100e7578063c08f15a1146104a3578063c2fa4813146104c3578063c5803100146104e3578063c81b383a146104f6578063ca066b351461051657610204565b80639c729da1146103e1578063aaff5f161461044e578063b12107701461046e578063b20864991461048357610204565b806340a7bb101161019b5780635b3011351161016a5780635b3011351461039f5780636e8c6158146103cc57806371ba2fd6146103e15780637a145748146104015780639924d33b1461042e57610204565b806340a7bb101461031a57806342d65a8d146103485780634f055b04146103685780635952c4ec1461037d57610204565b80630eaf6ea6116101d75780630eaf6ea6146102a357806310ddb137146102d05780632ef25ea7146102f05780633408e4701461030557610204565b806305bc710f1461020957806307e0db1714610234578063096568f61461025657806309eddf5414610276575b600080fd5b34801561021557600080fd5b5061021e6105ea565b60405161022b9190611366565b60405180910390f35b34801561024057600080fd5b5061025461024f366004610d6b565b6105f4565b005b34801561026257600080fd5b5061021e610271366004610c3d565b610618565b34801561028257600080fd5b50610296610291366004610d2c565b610620565b60405161022b9190611224565b3480156102af57600080fd5b506102c36102be366004610e48565b61063d565b60405161022b9190611295565b3480156102dc57600080fd5b506102546102eb366004610d6b565b610646565b3480156102fc57600080fd5b5061021e610666565b34801561031157600080fd5b5061021e610678565b34801561032657600080fd5b5061033a610335366004610da0565b610682565b60405161022b929190611425565b34801561035457600080fd5b50610254610363366004610e48565b610693565b34801561037457600080fd5b506102966106d3565b34801561038957600080fd5b506103926106e2565b60405161022b919061141c565b3480156103ab57600080fd5b506103bf6103ba366004610c3d565b6106e8565b60405161022b91906112a0565b3480156103d857600080fd5b5061021e610714565b3480156103ed57600080fd5b506102966103fc366004610c3d565b610724565b34801561040d57600080fd5b5061042161041c366004610d85565b610729565b60405161022b9190611433565b34801561043a57600080fd5b50610421610449366004611089565b610760565b34801561045a57600080fd5b50610254610469366004610f44565b610797565b34801561047a57600080fd5b5061021e61079e565b34801561048f57600080fd5b5061042161049e366004610d85565b6107a8565b3480156104af57600080fd5b506102546104be366004610c60565b6107ce565b3480156104cf57600080fd5b506102546104de366004610e98565b6107fc565b6102546104f1366004610fc1565b610806565b34801561050257600080fd5b50610296610511366004610c3d565b610a0d565b34801561052257600080fd5b506102c3610a28565b34801561053757600080fd5b50610254610546366004611120565b610a2d565b34801561055757600080fd5b50610296610a70565b34801561056c57600080fd5b5061021e610a85565b34801561058157600080fd5b50610254610590366004610c98565b610a8f565b3480156105a157600080fd5b50610392610af8565b3480156105b657600080fd5b506103bf6105c53660046110d4565b610afe565b3480156105d657600080fd5b506104216105e5366004610e48565b610b15565b60045461ffff1681565b6006805461ffff9092166401000000000265ffff0000000019909216919091179055565b60015b919050565b600080604051600284016002860382376009190151949350505050565b60019392505050565b6006805461ffff909216620100000263ffff000019909216919091179055565b600654640100000000900461ffff1681565b60015461ffff1690565b600554600097509795505050505050565b7f2514d58bc984f8563a7898bbee3c5e55ce79da869880e45dee5d34e012d4cb908383836040516106c693929190611375565b60405180910390a1505050565b6002546001600160a01b031681565b60035481565b60606000826040516020016106fd91906111db565b60408051808303601f190181529190529392505050565b60065462010000900461ffff1681565b503090565b61ffff821660009081526008602090815260408083206001600160a01b03851684529091529020546001600160401b031692915050565b600760209081526000928352604090922081518083018401805192815290840192909301919091209152546001600160401b031681565b5050505050565b60065461ffff1681565b60086020908152600092835260408084209091529082529020546001600160401b031681565b6001600160a01b03918216600090815260208190526040902080546001600160a01b03191691909216179055565b5050505050505050565b60006108128888610620565b6001600160a01b0380821660009081526020819052604090205491925016806108565760405162461bcd60e51b815260040161084d906112b3565b60405180910390fd5b61ffff8a1660009081526008602090815260408083203384529091529020805467ffffffffffffffff19811660016001600160401b039283160191821617909155604284015160568501516001600160a01b0381167390f79bf6eb2c4f870365e785982e1f101e93b90614156108ff57816101c5146108e75760405162461bcd60e51b815260040161084d9061133f565b60405162461bcd60e51b815260040161084d90611310565b5050600061090c336106e8565b905081600760008e61ffff1661ffff1681526020019081526020016000203360405160200161093b91906111db565b60408051601f198184030181529082905261095591611208565b908152602001604051809103902060006101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b031663df6ffbe985600160009054906101000a900461ffff1684868e8e6040518763ffffffff1660e01b81526004016109cd96959493929190611238565b600060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b50505050505050505050505050505050565b6000602081905290815260409020546001600160a01b031681565b600090565b7fd9d5727079da3cec229a1d8fc369b10d1067711929cde4789beee46c1cce115984848484604051610a6294939291906113e5565b60405180910390a150505050565b6001546201000090046001600160a01b031681565b60015461ffff1681565b604051621d356760e01b81526001600160a01b03861690621d356790610abf90879087908790879060040161139c565b600060405180830381600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050505050505050565b60055481565b604080516020810190915260008152949350505050565b61ffff83166000908152600760205260408082209051610b3890859085906111f8565b908152604051908190036020019020546001600160401b031690509392505050565b60008083601f840112610b6b578182fd5b5081356001600160401b03811115610b81578182fd5b602083019150836020828501011115610b9957600080fd5b9250929050565b600082601f830112610bb0578081fd5b81356001600160401b0380821115610bc457fe5b604051601f8301601f191681016020018281118282101715610be257fe5b604052828152848301602001861015610bf9578384fd5b82602086016020830137918201602001929092529392505050565b803561ffff8116811461061b57600080fd5b80356001600160401b038116811461061b57600080fd5b600060208284031215610c4e578081fd5b8135610c5981611477565b9392505050565b60008060408385031215610c72578081fd5b8235610c7d81611477565b91506020830135610c8d81611477565b809150509250929050565b600080600080600060a08688031215610caf578081fd5b8535610cba81611477565b9450610cc860208701610c14565b935060408601356001600160401b0380821115610ce3578283fd5b610cef89838a01610ba0565b9450610cfd60608901610c26565b93506080880135915080821115610d12578283fd5b50610d1f88828901610ba0565b9150509295509295909350565b60008060208385031215610d3e578182fd5b82356001600160401b03811115610d53578283fd5b610d5f85828601610b5a565b90969095509350505050565b600060208284031215610d7c578081fd5b610c5982610c14565b60008060408385031215610d97578182fd5b610c7d83610c14565b600080600080600080600060a0888a031215610dba578182fd5b610dc388610c14565b96506020880135610dd381611477565b955060408801356001600160401b0380821115610dee578384fd5b610dfa8b838c01610b5a565b909750955060608a013591508115158214610e13578384fd5b90935060808901359080821115610e28578384fd5b50610e358a828b01610b5a565b989b979a50959850939692959293505050565b600080600060408486031215610e5c578283fd5b610e6584610c14565b925060208401356001600160401b03811115610e7f578283fd5b610e8b86828701610b5a565b9497909650939450505050565b60008060008060008060008060c0898b031215610eb3578081fd5b610ebc89610c14565b975060208901356001600160401b0380821115610ed7578283fd5b610ee38c838d01610b5a565b909950975060408b01359150610ef882611477565b819650610f0760608c01610c26565b955060808b0135945060a08b0135915080821115610f23578283fd5b50610f308b828c01610b5a565b999c989b5096995094979396929594505050565b600080600080600060608688031215610f5b578081fd5b610f6486610c14565b945060208601356001600160401b0380821115610f7f578283fd5b610f8b89838a01610b5a565b90965094506040880135915080821115610fa3578283fd5b50610fb088828901610b5a565b969995985093965092949392505050565b60008060008060008060008060c0898b031215610fdc578182fd5b610fe589610c14565b975060208901356001600160401b0380821115611000578384fd5b61100c8c838d01610b5a565b909950975060408b0135915080821115611024578384fd5b6110308c838d01610b5a565b909750955060608b0135915061104582611477565b90935060808a01359061105782611477565b90925060a08a0135908082111561106c578283fd5b506110798b828c01610ba0565b9150509295985092959890939650565b6000806040838503121561109b578182fd5b6110a483610c14565b915060208301356001600160401b038111156110be578182fd5b6110ca85828601610ba0565b9150509250929050565b600080600080608085870312156110e9578182fd5b6110f285610c14565b935061110060208601610c14565b9250604085013561111081611477565b9396929550929360600135925050565b60008060008060808587031215611135578182fd5b61113e85610c14565b935061114c60208601610c14565b92506040850135915060608501356001600160401b0381111561116d578182fd5b61117987828801610ba0565b91505092959194509250565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526111c7816020860160208601611447565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6000828483379101908152919050565b6000825161121a818460208701611447565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038716815261ffff8616602082015260a060408201819052600090611266908301876111af565b6001600160401b03861660608401528281036080840152611288818587611185565b9998505050505050505050565b901515815260200190565b600060208252610c5960208301846111af565b60208082526037908201527f4c617965725a65726f4d6f636b3a2064657374696e6174696f6e204c6179657260408201527f5a65726f20456e64706f696e74206e6f7420666f756e64000000000000000000606082015260800190565b6020808252601590820152744e6174697665476173506172616d7320636865636b60581b604082015260600190565b6020808252600d908201526c11d85cc81a5b98dbdc9c9958dd609a1b604082015260600190565b61ffff91909116815260200190565b600061ffff8516825260406020830152611393604083018486611185565b95945050505050565b600061ffff86168252608060208301526113b960808301866111af565b6001600160401b038516604084015282810360608401526113da81856111af565b979650505050505050565b600061ffff80871683528086166020840152508360408301526080606083015261141260808301846111af565b9695505050505050565b90815260200190565b918252602082015260400190565b6001600160401b0391909116815260200190565b60005b8381101561146257818101518382015260200161144a565b83811115611471576000848401525b50505050565b6001600160a01b038116811461148c57600080fd5b5056fea2646970667358221220a7f9ad271ce28a579ced4d474f6eb5eeb380bcee81bc0c7a9ca7dc5a51dc5ed564736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
