{
  "_format": "hh-sol-artifact-1",
  "contractName": "GnosisSpokeConnector",
  "sourceName": "contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_mirrorDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_amb",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_processGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_merkle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gasCap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_mirrorChainId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Connector__processMessage_notUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RateLimited__rateLimited_messageSendRateExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__index_indexMoreThan32Bytes",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loc",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "len",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slice",
          "type": "uint256"
        }
      ],
      "name": "TypedMemView__index_overrun",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_identityOOG",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_invalidPointer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_nullPointer",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootVerified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "updated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "DelayBlocksUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_previous",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_updated",
          "type": "uint256"
        }
      ],
      "name": "GasCapUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageProcessed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "aggregateRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "MessageProven",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "MirrorConnectorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "mirrorDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "amb",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "rootManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "mirrorConnector",
          "type": "address"
        }
      ],
      "name": "NewConnector",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposedOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipProposed",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "Process",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRateLimit",
          "type": "uint256"
        }
      ],
      "name": "SendRateLimitUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "watcherManager",
          "type": "address"
        }
      ],
      "name": "WatcherManagerChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "AMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MERKLE",
      "outputs": [
        {
          "internalType": "contract MerkleTreeManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIRROR_CHAIN_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIRROR_DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROCESS_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVE_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROOT_MANAGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "addSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowlistedSenders",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delayBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "home",
      "outputs": [
        {
          "internalType": "contract IOutbox",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_potentialReplica",
          "type": "address"
        }
      ],
      "name": "isReplica",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastSentBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messages",
      "outputs": [
        {
          "internalType": "enum SpokeConnector.MessageStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mirrorConnector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "outboundRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "pendingAggregateRoots",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "processMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newlyProposed",
          "type": "address"
        }
      ],
      "name": "proposeNewOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes32[32]",
              "name": "path",
              "type": "bytes32[32]"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "internalType": "struct SpokeConnector.Proof[]",
          "name": "_proofs",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes32",
          "name": "_aggregateRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_aggregatePath",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenAggregateRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rateLimitBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_fraudulentRoot",
          "type": "bytes32"
        }
      ],
      "name": "removePendingAggregateRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "removeSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounced",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_encodedData",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "sentMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        }
      ],
      "name": "setDelayBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasCap",
          "type": "uint256"
        }
      ],
      "name": "setGasCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        }
      ],
      "name": "setMirrorConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rateLimit",
          "type": "uint256"
        }
      ],
      "name": "setRateLimitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        }
      ],
      "name": "setWatcherManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_expected",
          "type": "address"
        }
      ],
      "name": "verifySender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "watcherManager",
      "outputs": [
        {
          "internalType": "contract WatcherManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101806040523480156200001257600080fd5b5060405162003de238038062003de283398101604081905262000035916200040a565b8181818e8e8e8e8e8e8e8e8e8e808a8a8a8a8a6200005333620002c9565b8463ffffffff166000036200009e5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000ea5760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000095565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e052811615620001225762000122816200032e565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f55760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000095565b613a978411620002375760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000095565b6101208590526101408490526001600160a01b0382166200028a5760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000095565b506001600160a01b03166101005260085550620002b09550869450506200039792505050565b506101605250620004d29b505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b805163ffffffff81168114620003ed57600080fd5b919050565b80516001600160a01b0381168114620003ed57600080fd5b6000806000806000806000806000806000806101808d8f0312156200042e57600080fd5b620004398d620003d8565b9b506200044960208e01620003d8565b9a506200045960408e01620003f2565b99506200046960608e01620003f2565b98506200047960808e01620003f2565b975060a08d0151965060c08d0151955060e08d015194506200049f6101008e01620003f2565b9350620004b06101208e01620003f2565b92506101408d015191506101608d015190509295989b509295989b509295989b565b60805160a05160c05160e05161010051610120516101405161016051613841620005a1600039600081816108620152612cf00152600081816103400152611ebe01526000818161095d01528181611edf0152611f6c01526000818161075001528181610ada0152818161101a015261171e015260006102d00152600061055e01526000818161091301528181610c82015281816118c601528181611ae00152818161234501526123670152600081816104a50152818161068c015281816116c00152611dbe01526138416000f3fe6080604052600436106102b25760003560e01c80638456cb5911610175578063b95a2001116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda21461094b578063db1b76591461097f578063e0fed0101461099f578063fa31de01146109bf57600080fd5b8063d2a3cc71146108e1578063d69f9d6114610901578063d7d317b31461093557600080fd5b8063b95a200114610808578063c5b350df1461083b578063c8a4d69014610850578063cc39428314610884578063d1851c92146108a4578063d232c220146108c257600080fd5b8063a01892a51161012e578063a01892a51461073e578063a792c29b14610772578063ad9c0c2e14610792578063b1f8100d146107a8578063b2f87643146107c8578063b697f531146107e857600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639d3117c7146106fe5780639fa92f9d1461072b57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c6103273660046131bf565b6109ed565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e36600461327b565b610a97565b34801561038f57600080fd5b506103b361039e3660046131bf565b600f6020526000908152604090205460ff1681565b60405161030391906132c6565b3480156103cc57600080fd5b506103f06103db3660046131bf565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c3a565b34801561043657600080fd5b5061032c61044536600461327b565b610c77565b34801561045657600080fd5b5061032c6104653660046132ee565b610d1d565b34801561047657600080fd5b506103f061048536600461339f565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e23660046131bf565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c61052836600461339f565b610fdf565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b336600461339f565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611016565b3480156105e957600080fd5b5061032c6105f836600461339f565b61109f565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e3660046131bf565b61111c565b34801561063f57600080fd5b5061032c6111e7565b34801561065457600080fd5b5061032c6106633660046131bf565b611212565b34801561067457600080fd5b5061032c611246565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e93660046131bf565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103626107193660046131bf565b60096020526000908152604090205481565b34801561073757600080fd5b5030610580565b34801561074a57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561077e57600080fd5b50600454610580906001600160a01b031681565b34801561079e57600080fd5b5061036260085481565b3480156107b457600080fd5b5061032c6107c336600461339f565b6112fa565b3480156107d457600080fd5b5061032c6107e336600461339f565b611398565b3480156107f457600080fd5b5061032c61080336600461339f565b611414565b34801561081457600080fd5b506102f26108233660046133d5565b600e6020526000908152604090205463ffffffff1681565b34801561084757600080fd5b5061032c611493565b34801561085c57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561089057600080fd5b50600354610580906001600160a01b031681565b3480156108b057600080fd5b506001546001600160a01b0316610580565b3480156108ce57600080fd5b506000546001600160a01b0316156103f0565b3480156108ed57600080fd5b5061032c6108fc36600461339f565b611503565b34801561090d57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561094157600080fd5b5061036260065481565b34801561095757600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098b57600080fd5b506103f061099a36600461339f565b6115da565b3480156109ab57600080fd5b5061032c6109ba3660046131bf565b6115eb565b3480156109cb57600080fd5b506109df6109da3660046133f0565b61161f565b604051610303929190613497565b6000546001600160a01b03163314610a18576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a5d5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a9f6117ee565b43600554600654610ab091906134c6565b1115610acf576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a91906134d9565b6000818152600c602052604090205490915060ff1615610bb05760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a54565b600081604051602001610bc591815260200190565b6040516020818303038152906040529050610be0818461183b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2d908390869033906134f2565b60405180910390a1505050565b6000546001600160a01b03163314610c65576040516311a8a1bb60e31b815260040160405180910390fd5b610c6d6119a9565b610c756119f9565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd85760405162461bcd60e51b8152600401610a549060208082526004908201526310a0a6a160e11b604082015260600190565b610ce181611a4e565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d12929190613530565b60405180910390a150565b610d256117ee565b610d2d611bad565b83610d645760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a54565b600085856000818110610d7957610d7961355a565b9050602002810190610d8b9190613570565b610d959080613591565b604051610da39291906135df565b604051809103902090506000610e0a8288886000818110610dc657610dc661355a565b9050602002810190610dd89190613570565b60200189896000818110610dee57610dee61355a565b9050602002810190610e009190613570565b6104200135611c06565b9050610e1881868686611cad565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f3e5788888263ffffffff16818110610e5d57610e5d61355a565b9050602002810190610e6f9190613570565b610e799080613591565b604051610e879291906135df565b604051809103902093506000610edc858b8b8563ffffffff16818110610eaf57610eaf61355a565b9050602002810190610ec19190613570565b6020018c8c8663ffffffff16818110610dee57610dee61355a565b9050838114610f1b5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a54565b506000848152600f60205260409020805460ff1916600190811790915501610e37565b5060005b818163ffffffff161015610fca57610fc189898363ffffffff16818110610f6b57610f6b61355a565b9050602002810190610f7d9190613570565b610f879080613591565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da892505050565b50600101610f42565b50505050610fd86001600755565b5050505050565b6000546001600160a01b0316331461100a576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612085565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a91906134d9565b905090565b6000546001600160a01b031633146110ca576040516311a8a1bb60e31b815260040160405180910390fd5b476110d582826120ee565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161111091815260200190565b60405180910390a25050565b6000546001600160a01b03163314611147576040516311a8a1bb60e31b815260040160405180910390fd5b61114f6119a9565b60008181526009602052604081205490036111a45760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a54565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d129083815260200190565b6000546001600160a01b03163314610c75576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b0316331461123d576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612207565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906135ef565b6112ea5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a54565b6112f26117ee565b610c75612248565b6000546001600160a01b03163314611325576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611343575060025415155b15611361576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361138f57604051634a2fb73f60e11b815260040160405180910390fd5b6110138161228b565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d12565b6000546001600160a01b0316331461143f576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d12565b6001546001600160a01b031633146114be576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114d09190613611565b116114ee576040516324e0285f60e21b815260040160405180910390fd5b600154610c75906001600160a01b03166122d9565b6000546001600160a01b0316331461152e576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361158c5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a54565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d12565b60006115e58261233e565b92915050565b6000546001600160a01b03163314611616576040516311a8a1bb60e31b815260040160405180910390fd5b611013816123ec565b336000908152600d602052604081205460609060ff166116705760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a54565b63ffffffff8086166000908152600e602052604081208054919291909116908261169983613624565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116f87f00000000000000000000000000000000000000000000000000000000000000006116ef336001600160a01b031690565b848a8a8a61246a565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613647565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117c4600184613611565b84876040516117d6949392919061366b565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c755760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a54565b81516020146118765760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b80516020146118b65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b9061190890879060240161369a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611943856124a2565b6040518463ffffffff1660e01b8152600401611961939291906136ad565b6020604051808303816000875af1158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a491906134d9565b505050565b600354600160a01b900460ff16610c755760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a54565b611a016119a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b8051602014611a895760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b600354611a9e906001600160a01b031661233e565b611add5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a54565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6091906134d9565b14611b9c5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610a54565b611013611ba8826136e1565b612500565b600260075403611bff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a54565b6002600755565b6000806000858152600f602052604090205460ff166002811115611c2c57611c2c6132b0565b14611c6f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a54565b611ca38484602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b90505b9392505050565b6000848152600b602052604090205460ff16611da257611ccc83612977565b6000611d028584602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b9050838114611d495760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a54565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611d989086815260200190565b60405180910390a3505b50505050565b600080611db58382612ad7565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ded62ffffff198316612afb565b63ffffffff1614611e2f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a54565b6000611e4062ffffff198316612b10565b905060016000828152600f602052604090205460ff166002811115611e6757611e676132b0565b14611e9e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a54565b6000818152600f60205260409020805460ff191660021790556001611f037f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006134c6565b611f0d9190613611565b5a11611f445760405162461bcd60e51b8152600401610a54906020808252600490820152632167617360e01b604082015260600190565b6000611f5562ffffff198416612b59565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611fb062ffffff198816612b6a565b611fbf62ffffff198916612b7e565b611fce62ffffff198a16612b93565b611feb611fe062ffffff198c16612ba8565b62ffffff1916612bd6565b604051602401611ffe9493929190613708565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612038858560008685612c1f565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe48906120719088908b908690613737565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561213e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a54565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b50509050806119a45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a54565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6122506117ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a313390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115e57f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e791906134d9565b612caa565b600554810361242f5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a54565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d12565b606086868686868660405160200161248796959493929190613758565b60405160208183030381529060405290509695505050505050565b600081516020146124e45760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6115e5828060200190518101906124fb91906134d9565b612dc5565b8061253e5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a54565b600081815260096020526040902054156125915760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a54565b6000818152600a602052604090205460ff16156125e65760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a54565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d129083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806129ba5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a54565b6000818152600a602052604090205460ff16156129d45750565b60008181526009602052604081205490819003612a2a5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a54565b600854612a378243613611565b1015612a855760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a54565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612af264ffffffffff85168284612ddb565b95945050505050565b60006115e562ffffff19831660286004612e18565b600080612b268360781c6001600160601b031690565b6001600160601b031690506000612b468460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115e5612b6783612e48565b90565b60006115e562ffffff198316826004612e18565b60006115e562ffffff19831660246004612e18565b60006115e562ffffff19831660046020612e59565b60006115e5604c612bc681601886901c6001600160601b0316613611565b62ffffff19851691906000612f64565b6060600080612bee8460181c6001600160601b031690565b6001600160601b031690506040519150819250612c0e8483602001612fe0565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612c4557612c456131d8565b6040519080825280601f01601f191660200182016040528015612c6f576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612c90578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03851614612cee5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a54565b7f00000000000000000000000000000000000000000000000000000000000000008214612d475760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610a54565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db391906137b2565b6001600160a01b031614949350505050565b6000601054821115612dd75760105491505b5090565b600080612de883856134c6565b9050604051811115612df8575060005b80600003612e0d5762ffffff19915050611ca6565b612af28585856130d3565b6000612e258260206137cf565b612e309060086137e8565b60ff16612e3e858585612e59565b901c949350505050565b60006115e562ffffff198316602c60205b60008160ff16600003612e6e57506000611ca6565b612e818460181c6001600160601b031690565b6001600160601b0316612e9760ff8416856134c6565b1115612eff57612eb08460781c6001600160601b031690565b612ec38560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a54565b60208260ff161115612f245760405163045df3f960e01b815260040160405180910390fd5b600882026000612f3d8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612f7a8660781c6001600160601b031690565b6001600160601b03169050612f8e8661314a565b84612f9987846134c6565b612fa391906134c6565b1115612fb65762ffffff19915050612fd8565b612fc085826134c6565b9050612fd48364ffffffffff168286612ddb565b9150505b949350505050565b600062ffffff19808416036130085760405163148d513360e21b815260040160405180910390fd5b61301183613183565b1561302f57604051632ee0949160e11b815260040160405180910390fd5b60006130448460181c6001600160601b031690565b6001600160601b0316905060006130648560781c6001600160601b031690565b6001600160601b031690506000806040519150858211156130855760206060fd5b8386858560045afa9050806130ad57604051632af1bd9b60e21b815260040160405180910390fd5b6130c86130ba8860d81c90565b64ffffffffff1687866130d3565b979650505050505050565b60006060601883856001600160601b038216821480156130fb575086816001600160601b0316145b6131345760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a54565b96831b90961790911b90941790931b9392505050565b600061315f8260181c6001600160601b031690565b6131728360781c6001600160601b031690565b016001600160601b03169050919050565b600061318f8260d81c90565b64ffffffffff1664ffffffffff036131a957506001919050565b60006131b48361314a565b604051109392505050565b6000602082840312156131d157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126131ff57600080fd5b813567ffffffffffffffff8082111561321a5761321a6131d8565b604051601f8301601f19908116603f01168101908282118183101715613242576132426131d8565b8160405283815286602085880101111561325b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561328d57600080fd5b813567ffffffffffffffff8111156132a457600080fd5b612fd8848285016131ee565b634e487b7160e01b600052602160045260246000fd5b60208101600383106132e857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561330757600080fd5b853567ffffffffffffffff8082111561331f57600080fd5b818801915088601f83011261333357600080fd5b81358181111561334257600080fd5b8960208260051b850101111561335757600080fd5b60209283019750955050860135925061044086018781111561337857600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461101357600080fd5b6000602082840312156133b157600080fd5b8135611ca68161338a565b803563ffffffff811681146133d057600080fd5b919050565b6000602082840312156133e757600080fd5b611ca6826133bc565b60008060006060848603121561340557600080fd5b61340e846133bc565b925060208401359150604084013567ffffffffffffffff81111561343157600080fd5b61343d868287016131ee565b9150509250925092565b60005b8381101561346257818101518382015260200161344a565b50506000910152565b60008151808452613483816020860160208601613447565b601f01601f19169290920160200192915050565b828152604060208201526000611ca3604083018461346b565b634e487b7160e01b600052601160045260246000fd5b808201808211156115e5576115e56134b0565b6000602082840312156134eb57600080fd5b5051919050565b606081526000613505606083018661346b565b8281036020840152613517818661346b565b91505060018060a01b0383166040830152949350505050565b604081526000613543604083018561346b565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261358757600080fd5b9190910192915050565b6000808335601e198436030181126135a857600080fd5b83018035915067ffffffffffffffff8211156135c357600080fd5b6020019150368190038213156135d857600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561360157600080fd5b81518015158114611ca657600080fd5b818103818111156115e5576115e56134b0565b600063ffffffff80831681810361363d5761363d6134b0565b6001019392505050565b6000806040838503121561365a57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613690608083018461346b565b9695505050505050565b602081526000611ca6602083018461346b565b6001600160a01b03841681526060602082018190526000906136d19083018561346b565b9050826040830152949350505050565b80516020808301519190811015613702576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613690608083018461346b565b8381528215156020820152606060408201526000612af2606083018461346b565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516137a081604c850160208701613447565b91909101604c01979650505050505050565b6000602082840312156137c457600080fd5b8151611ca68161338a565b60ff82811682821603908111156115e5576115e56134b0565b60ff8181168382160290811690818114613804576138046134b0565b509291505056fea2646970667358221220c23780cb54942c64f152b504f2f46971273932b30e89e7626227a2a82d5b59f664736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102b25760003560e01c80638456cb5911610175578063b95a2001116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda21461094b578063db1b76591461097f578063e0fed0101461099f578063fa31de01146109bf57600080fd5b8063d2a3cc71146108e1578063d69f9d6114610901578063d7d317b31461093557600080fd5b8063b95a200114610808578063c5b350df1461083b578063c8a4d69014610850578063cc39428314610884578063d1851c92146108a4578063d232c220146108c257600080fd5b8063a01892a51161012e578063a01892a51461073e578063a792c29b14610772578063ad9c0c2e14610792578063b1f8100d146107a8578063b2f87643146107c8578063b697f531146107e857600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639d3117c7146106fe5780639fa92f9d1461072b57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c6103273660046131bf565b6109ed565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e36600461327b565b610a97565b34801561038f57600080fd5b506103b361039e3660046131bf565b600f6020526000908152604090205460ff1681565b60405161030391906132c6565b3480156103cc57600080fd5b506103f06103db3660046131bf565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c3a565b34801561043657600080fd5b5061032c61044536600461327b565b610c77565b34801561045657600080fd5b5061032c6104653660046132ee565b610d1d565b34801561047657600080fd5b506103f061048536600461339f565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e23660046131bf565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c61052836600461339f565b610fdf565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b336600461339f565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611016565b3480156105e957600080fd5b5061032c6105f836600461339f565b61109f565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e3660046131bf565b61111c565b34801561063f57600080fd5b5061032c6111e7565b34801561065457600080fd5b5061032c6106633660046131bf565b611212565b34801561067457600080fd5b5061032c611246565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e93660046131bf565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103626107193660046131bf565b60096020526000908152604090205481565b34801561073757600080fd5b5030610580565b34801561074a57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561077e57600080fd5b50600454610580906001600160a01b031681565b34801561079e57600080fd5b5061036260085481565b3480156107b457600080fd5b5061032c6107c336600461339f565b6112fa565b3480156107d457600080fd5b5061032c6107e336600461339f565b611398565b3480156107f457600080fd5b5061032c61080336600461339f565b611414565b34801561081457600080fd5b506102f26108233660046133d5565b600e6020526000908152604090205463ffffffff1681565b34801561084757600080fd5b5061032c611493565b34801561085c57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561089057600080fd5b50600354610580906001600160a01b031681565b3480156108b057600080fd5b506001546001600160a01b0316610580565b3480156108ce57600080fd5b506000546001600160a01b0316156103f0565b3480156108ed57600080fd5b5061032c6108fc36600461339f565b611503565b34801561090d57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561094157600080fd5b5061036260065481565b34801561095757600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098b57600080fd5b506103f061099a36600461339f565b6115da565b3480156109ab57600080fd5b5061032c6109ba3660046131bf565b6115eb565b3480156109cb57600080fd5b506109df6109da3660046133f0565b61161f565b604051610303929190613497565b6000546001600160a01b03163314610a18576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a5d5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a9f6117ee565b43600554600654610ab091906134c6565b1115610acf576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a91906134d9565b6000818152600c602052604090205490915060ff1615610bb05760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a54565b600081604051602001610bc591815260200190565b6040516020818303038152906040529050610be0818461183b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2d908390869033906134f2565b60405180910390a1505050565b6000546001600160a01b03163314610c65576040516311a8a1bb60e31b815260040160405180910390fd5b610c6d6119a9565b610c756119f9565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd85760405162461bcd60e51b8152600401610a549060208082526004908201526310a0a6a160e11b604082015260600190565b610ce181611a4e565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d12929190613530565b60405180910390a150565b610d256117ee565b610d2d611bad565b83610d645760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a54565b600085856000818110610d7957610d7961355a565b9050602002810190610d8b9190613570565b610d959080613591565b604051610da39291906135df565b604051809103902090506000610e0a8288886000818110610dc657610dc661355a565b9050602002810190610dd89190613570565b60200189896000818110610dee57610dee61355a565b9050602002810190610e009190613570565b6104200135611c06565b9050610e1881868686611cad565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f3e5788888263ffffffff16818110610e5d57610e5d61355a565b9050602002810190610e6f9190613570565b610e799080613591565b604051610e879291906135df565b604051809103902093506000610edc858b8b8563ffffffff16818110610eaf57610eaf61355a565b9050602002810190610ec19190613570565b6020018c8c8663ffffffff16818110610dee57610dee61355a565b9050838114610f1b5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a54565b506000848152600f60205260409020805460ff1916600190811790915501610e37565b5060005b818163ffffffff161015610fca57610fc189898363ffffffff16818110610f6b57610f6b61355a565b9050602002810190610f7d9190613570565b610f879080613591565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da892505050565b50600101610f42565b50505050610fd86001600755565b5050505050565b6000546001600160a01b0316331461100a576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612085565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a91906134d9565b905090565b6000546001600160a01b031633146110ca576040516311a8a1bb60e31b815260040160405180910390fd5b476110d582826120ee565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161111091815260200190565b60405180910390a25050565b6000546001600160a01b03163314611147576040516311a8a1bb60e31b815260040160405180910390fd5b61114f6119a9565b60008181526009602052604081205490036111a45760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a54565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d129083815260200190565b6000546001600160a01b03163314610c75576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b0316331461123d576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612207565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906135ef565b6112ea5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a54565b6112f26117ee565b610c75612248565b6000546001600160a01b03163314611325576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611343575060025415155b15611361576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361138f57604051634a2fb73f60e11b815260040160405180910390fd5b6110138161228b565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d12565b6000546001600160a01b0316331461143f576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d12565b6001546001600160a01b031633146114be576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114d09190613611565b116114ee576040516324e0285f60e21b815260040160405180910390fd5b600154610c75906001600160a01b03166122d9565b6000546001600160a01b0316331461152e576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361158c5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a54565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d12565b60006115e58261233e565b92915050565b6000546001600160a01b03163314611616576040516311a8a1bb60e31b815260040160405180910390fd5b611013816123ec565b336000908152600d602052604081205460609060ff166116705760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a54565b63ffffffff8086166000908152600e602052604081208054919291909116908261169983613624565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116f87f00000000000000000000000000000000000000000000000000000000000000006116ef336001600160a01b031690565b848a8a8a61246a565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613647565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117c4600184613611565b84876040516117d6949392919061366b565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c755760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a54565b81516020146118765760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b80516020146118b65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b9061190890879060240161369a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611943856124a2565b6040518463ffffffff1660e01b8152600401611961939291906136ad565b6020604051808303816000875af1158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a491906134d9565b505050565b600354600160a01b900460ff16610c755760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a54565b611a016119a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b8051602014611a895760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b600354611a9e906001600160a01b031661233e565b611add5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a54565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6091906134d9565b14611b9c5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610a54565b611013611ba8826136e1565b612500565b600260075403611bff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a54565b6002600755565b6000806000858152600f602052604090205460ff166002811115611c2c57611c2c6132b0565b14611c6f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a54565b611ca38484602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b90505b9392505050565b6000848152600b602052604090205460ff16611da257611ccc83612977565b6000611d028584602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b9050838114611d495760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a54565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611d989086815260200190565b60405180910390a3505b50505050565b600080611db58382612ad7565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ded62ffffff198316612afb565b63ffffffff1614611e2f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a54565b6000611e4062ffffff198316612b10565b905060016000828152600f602052604090205460ff166002811115611e6757611e676132b0565b14611e9e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a54565b6000818152600f60205260409020805460ff191660021790556001611f037f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006134c6565b611f0d9190613611565b5a11611f445760405162461bcd60e51b8152600401610a54906020808252600490820152632167617360e01b604082015260600190565b6000611f5562ffffff198416612b59565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611fb062ffffff198816612b6a565b611fbf62ffffff198916612b7e565b611fce62ffffff198a16612b93565b611feb611fe062ffffff198c16612ba8565b62ffffff1916612bd6565b604051602401611ffe9493929190613708565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612038858560008685612c1f565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe48906120719088908b908690613737565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561213e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a54565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b50509050806119a45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a54565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6122506117ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a313390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115e57f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e791906134d9565b612caa565b600554810361242f5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a54565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d12565b606086868686868660405160200161248796959493929190613758565b60405160208183030381529060405290509695505050505050565b600081516020146124e45760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6115e5828060200190518101906124fb91906134d9565b612dc5565b8061253e5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a54565b600081815260096020526040902054156125915760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a54565b6000818152600a602052604090205460ff16156125e65760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a54565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d129083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806129ba5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a54565b6000818152600a602052604090205460ff16156129d45750565b60008181526009602052604081205490819003612a2a5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a54565b600854612a378243613611565b1015612a855760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a54565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612af264ffffffffff85168284612ddb565b95945050505050565b60006115e562ffffff19831660286004612e18565b600080612b268360781c6001600160601b031690565b6001600160601b031690506000612b468460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115e5612b6783612e48565b90565b60006115e562ffffff198316826004612e18565b60006115e562ffffff19831660246004612e18565b60006115e562ffffff19831660046020612e59565b60006115e5604c612bc681601886901c6001600160601b0316613611565b62ffffff19851691906000612f64565b6060600080612bee8460181c6001600160601b031690565b6001600160601b031690506040519150819250612c0e8483602001612fe0565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612c4557612c456131d8565b6040519080825280601f01601f191660200182016040528015612c6f576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612c90578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03851614612cee5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a54565b7f00000000000000000000000000000000000000000000000000000000000000008214612d475760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610a54565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db391906137b2565b6001600160a01b031614949350505050565b6000601054821115612dd75760105491505b5090565b600080612de883856134c6565b9050604051811115612df8575060005b80600003612e0d5762ffffff19915050611ca6565b612af28585856130d3565b6000612e258260206137cf565b612e309060086137e8565b60ff16612e3e858585612e59565b901c949350505050565b60006115e562ffffff198316602c60205b60008160ff16600003612e6e57506000611ca6565b612e818460181c6001600160601b031690565b6001600160601b0316612e9760ff8416856134c6565b1115612eff57612eb08460781c6001600160601b031690565b612ec38560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a54565b60208260ff161115612f245760405163045df3f960e01b815260040160405180910390fd5b600882026000612f3d8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612f7a8660781c6001600160601b031690565b6001600160601b03169050612f8e8661314a565b84612f9987846134c6565b612fa391906134c6565b1115612fb65762ffffff19915050612fd8565b612fc085826134c6565b9050612fd48364ffffffffff168286612ddb565b9150505b949350505050565b600062ffffff19808416036130085760405163148d513360e21b815260040160405180910390fd5b61301183613183565b1561302f57604051632ee0949160e11b815260040160405180910390fd5b60006130448460181c6001600160601b031690565b6001600160601b0316905060006130648560781c6001600160601b031690565b6001600160601b031690506000806040519150858211156130855760206060fd5b8386858560045afa9050806130ad57604051632af1bd9b60e21b815260040160405180910390fd5b6130c86130ba8860d81c90565b64ffffffffff1687866130d3565b979650505050505050565b60006060601883856001600160601b038216821480156130fb575086816001600160601b0316145b6131345760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a54565b96831b90961790911b90941790931b9392505050565b600061315f8260181c6001600160601b031690565b6131728360781c6001600160601b031690565b016001600160601b03169050919050565b600061318f8260d81c90565b64ffffffffff1664ffffffffff036131a957506001919050565b60006131b48361314a565b604051109392505050565b6000602082840312156131d157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126131ff57600080fd5b813567ffffffffffffffff8082111561321a5761321a6131d8565b604051601f8301601f19908116603f01168101908282118183101715613242576132426131d8565b8160405283815286602085880101111561325b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561328d57600080fd5b813567ffffffffffffffff8111156132a457600080fd5b612fd8848285016131ee565b634e487b7160e01b600052602160045260246000fd5b60208101600383106132e857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561330757600080fd5b853567ffffffffffffffff8082111561331f57600080fd5b818801915088601f83011261333357600080fd5b81358181111561334257600080fd5b8960208260051b850101111561335757600080fd5b60209283019750955050860135925061044086018781111561337857600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461101357600080fd5b6000602082840312156133b157600080fd5b8135611ca68161338a565b803563ffffffff811681146133d057600080fd5b919050565b6000602082840312156133e757600080fd5b611ca6826133bc565b60008060006060848603121561340557600080fd5b61340e846133bc565b925060208401359150604084013567ffffffffffffffff81111561343157600080fd5b61343d868287016131ee565b9150509250925092565b60005b8381101561346257818101518382015260200161344a565b50506000910152565b60008151808452613483816020860160208601613447565b601f01601f19169290920160200192915050565b828152604060208201526000611ca3604083018461346b565b634e487b7160e01b600052601160045260246000fd5b808201808211156115e5576115e56134b0565b6000602082840312156134eb57600080fd5b5051919050565b606081526000613505606083018661346b565b8281036020840152613517818661346b565b91505060018060a01b0383166040830152949350505050565b604081526000613543604083018561346b565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261358757600080fd5b9190910192915050565b6000808335601e198436030181126135a857600080fd5b83018035915067ffffffffffffffff8211156135c357600080fd5b6020019150368190038213156135d857600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561360157600080fd5b81518015158114611ca657600080fd5b818103818111156115e5576115e56134b0565b600063ffffffff80831681810361363d5761363d6134b0565b6001019392505050565b6000806040838503121561365a57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613690608083018461346b565b9695505050505050565b602081526000611ca6602083018461346b565b6001600160a01b03841681526060602082018190526000906136d19083018561346b565b9050826040830152949350505050565b80516020808301519190811015613702576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613690608083018461346b565b8381528215156020820152606060408201526000612af2606083018461346b565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516137a081604c850160208701613447565b91909101604c01979650505050505050565b6000602082840312156137c457600080fd5b8151611ca68161338a565b60ff82811682821603908111156115e5576115e56134b0565b60ff8181168382160290811690818114613804576138046134b0565b509291505056fea2646970667358221220c23780cb54942c64f152b504f2f46971273932b30e89e7626227a2a82d5b59f664736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
