{
  "_format": "hh-sol-artifact-1",
  "contractName": "ZkSyncSpokeConnector",
  "sourceName": "contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.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"
        }
      ],
      "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": "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_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": "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": "0x6101606040523480156200001257600080fd5b506040516200386e3803806200386e8339810160408190526200003591620003b0565b89898989898989898989808a8a8a8a8a6200005033620002b0565b8463ffffffff166000036200009b5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e75760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000092565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011f576200011f8162000315565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f25760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000092565b613a978411620002345760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000092565b6101208590526101408490526001600160a01b038216620002875760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000092565b506001600160a01b03166101005260085550620004649f50505050505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200039357600080fd5b919050565b80516001600160a01b03811681146200039357600080fd5b6000806000806000806000806000806101408b8d031215620003d157600080fd5b620003dc8b6200037e565b9950620003ec60208c016200037e565b9850620003fc60408c0162000398565b97506200040c60608c0162000398565b96506200041c60808c0162000398565b955060a08b0151945060c08b0151935060e08b01519250620004426101008c0162000398565b9150620004536101208c0162000398565b90509295989b9194979a5092959850565b60805160a05160c05160e051610100516101205161014051613369620005056000396000818161031a0152611c9e0152600081816108e301528181611cbf0152611d4c01526000818161070a01528181610a6001528181610fa00152611674015260006102aa015260006105380152600081816108990152610c0801526000818161047f01528181610646015281816116160152611b9e01526133696000f3fe60806040526004361061028c5760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d6114610887578063d7d317b3146108bb578063d88beda2146108d1578063db1b765914610905578063e0fed01014610925578063fa31de011461094557600080fd5b8063b95a2001146107c2578063c5b350df146107f5578063cc3942831461080a578063d1851c921461082a578063d232c22014610848578063d2a3cc711461086757600080fd5b8063a01892a511610113578063a01892a5146106f8578063a792c29b1461072c578063ad9c0c2e1461074c578063b1f8100d14610762578063b2f8764314610782578063b697f531146107a257600080fd5b80638456cb59146106225780638d3638f4146106375780638da5cb5b1461066a57806398c9f2b9146106885780639d3117c7146106b85780639fa92f9d146106e557600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461057257806365eaf11b146105a257806368742da6146105b75780636a42b8f8146105d75780636b04a933146105ed578063715018a61461060d57600080fd5b806352a9674b1461046d578063572386ca146104a1578063579c1618146104d15780635bd11efc146104e75780635c975abb146105075780635f61e3ec1461052657600080fd5b8063301f07c311610250578063301f07c31461039a5780633cf52ffb146103da5780633f4ba83a146103ef5780634ff746f614610404578063508a109b146104245780635190bc531461044457600080fd5b806314168416146102985780631eeaabea146102e657806325e3beda146103085780632bb1ae7c1461034a5780632bbd59ca1461035d57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102f257600080fd5b50610306610301366004612d21565b610973565b005b34801561031457600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102dd565b610306610358366004612ddd565b610a1d565b34801561036957600080fd5b5061038d610378366004612d21565b600f6020526000908152604090205460ff1681565b6040516102dd9190612e28565b3480156103a657600080fd5b506103ca6103b5366004612d21565b600a6020526000908152604090205460ff1681565b60405190151581526020016102dd565b3480156103e657600080fd5b5060025461033c565b3480156103fb57600080fd5b50610306610bc0565b34801561041057600080fd5b5061030661041f366004612ddd565b610bfd565b34801561043057600080fd5b5061030661043f366004612e50565b610ca3565b34801561045057600080fd5b506103ca61045f366004612eec565b6001600160a01b0316301490565b34801561047957600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b506103ca6104bc366004612d21565b600c6020526000908152604090205460ff1681565b3480156104dd57600080fd5b5061033c60055481565b3480156104f357600080fd5b50610306610502366004612eec565b610f65565b34801561051357600080fd5b50600354600160a01b900460ff166103ca565b34801561053257600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dd565b34801561057e57600080fd5b506103ca61058d366004612eec565b600d6020526000908152604090205460ff1681565b3480156105ae57600080fd5b5061033c610f9c565b3480156105c357600080fd5b506103066105d2366004612eec565b611025565b3480156105e357600080fd5b5062093a8061033c565b3480156105f957600080fd5b50610306610608366004612d21565b6110a2565b34801561061957600080fd5b5061030661116d565b34801561062e57600080fd5b50610306611198565b34801561064357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102cc565b34801561067657600080fd5b506000546001600160a01b031661055a565b34801561069457600080fd5b506103ca6106a3366004612d21565b600b6020526000908152604090205460ff1681565b3480156106c457600080fd5b5061033c6106d3366004612d21565b60096020526000908152604090205481565b3480156106f157600080fd5b503061055a565b34801561070457600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073857600080fd5b5060045461055a906001600160a01b031681565b34801561075857600080fd5b5061033c60085481565b34801561076e57600080fd5b5061030661077d366004612eec565b61124c565b34801561078e57600080fd5b5061030661079d366004612eec565b6112ea565b3480156107ae57600080fd5b506103066107bd366004612eec565b611366565b3480156107ce57600080fd5b506102cc6107dd366004612f2e565b600e6020526000908152604090205463ffffffff1681565b34801561080157600080fd5b506103066113e5565b34801561081657600080fd5b5060035461055a906001600160a01b031681565b34801561083657600080fd5b506001546001600160a01b031661055a565b34801561085457600080fd5b506000546001600160a01b0316156103ca565b34801561087357600080fd5b50610306610882366004612eec565b611455565b34801561089357600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c757600080fd5b5061033c60065481565b3480156108dd57600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091157600080fd5b506103ca610920366004612eec565b61152c565b34801561093157600080fd5b50610306610940366004612d21565b611541565b34801561095157600080fd5b50610965610960366004612f49565b611575565b6040516102dd929190612ff0565b6000546001600160a01b0316331461099e576040516311a8a1bb60e31b815260040160405180910390fd5b60085481036109e35760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a25611744565b43600554600654610a36919061301f565b1115610a55576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190613032565b6000818152600c602052604090205490915060ff1615610b365760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109da565b600081604051602001610b4b91815260200190565b6040516020818303038152906040529050610b668184611791565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bb39083908690339061304b565b60405180910390a1505050565b6000546001600160a01b03163314610beb576040516311a8a1bb60e31b815260040160405180910390fd5b610bf361184f565b610bfb61189f565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c5e5760405162461bcd60e51b81526004016109da9060208082526004908201526310a0a6a160e11b604082015260600190565b610c67816118f4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610c98929190613089565b60405180910390a150565b610cab611744565b610cb361198d565b83610cea5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109da565b600085856000818110610cff57610cff6130b3565b9050602002810190610d1191906130c9565b610d1b90806130ea565b604051610d29929190613138565b604051809103902090506000610d908288886000818110610d4c57610d4c6130b3565b9050602002810190610d5e91906130c9565b60200189896000818110610d7457610d746130b3565b9050602002810190610d8691906130c9565b61042001356119e6565b9050610d9e81868686611a8d565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ec45788888263ffffffff16818110610de357610de36130b3565b9050602002810190610df591906130c9565b610dff90806130ea565b604051610e0d929190613138565b604051809103902093506000610e62858b8b8563ffffffff16818110610e3557610e356130b3565b9050602002810190610e4791906130c9565b6020018c8c8663ffffffff16818110610d7457610d746130b3565b9050838114610ea15760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109da565b506000848152600f60205260409020805460ff1916600190811790915501610dbd565b5060005b818163ffffffff161015610f5057610f4789898363ffffffff16818110610ef157610ef16130b3565b9050602002810190610f0391906130c9565b610f0d90806130ea565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8892505050565b50600101610ec8565b50505050610f5e6001600755565b5050505050565b6000546001600160a01b03163314610f90576040516311a8a1bb60e31b815260040160405180910390fd5b610f9981611e65565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190613032565b905090565b6000546001600160a01b03163314611050576040516311a8a1bb60e31b815260040160405180910390fd5b4761105b8282611ece565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161109691815260200190565b60405180910390a25050565b6000546001600160a01b031633146110cd576040516311a8a1bb60e31b815260040160405180910390fd5b6110d561184f565b600081815260096020526040812054900361112a5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109da565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610c989083815260200190565b6000546001600160a01b03163314610bfb576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190613148565b61123c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109da565b611244611744565b610bfb611fe7565b6000546001600160a01b03163314611277576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611295575060025415155b156112b3576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112e157604051634a2fb73f60e11b815260040160405180910390fd5b610f998161202a565b6000546001600160a01b03163314611315576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610c98565b6000546001600160a01b03163314611391576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610c98565b6001546001600160a01b03163314611410576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611422919061316a565b11611440576040516324e0285f60e21b815260040160405180910390fd5b600154610bfb906001600160a01b0316612078565b6000546001600160a01b03163314611480576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114de5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109da565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610c98565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461156c576040516311a8a1bb60e31b815260040160405180910390fd5b610f99816120dd565b336000908152600d602052604081205460609060ff166115c65760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109da565b63ffffffff8086166000908152600e60205260408120805491929190911690826115ef8361317d565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061164e7f0000000000000000000000000000000000000000000000000000000000000000611645336001600160a01b031690565b848a8a8a61215b565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906131a0565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361171a60018461316a565b848760405161172c94939291906131c4565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610bfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109da565b8051156117cf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109da565b6117dc61800060086131f3565b6001600160a01b03166362f84b24836040518263ffffffff1660e01b8152600401611807919061321a565b6020604051808303816000875af1158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a9190613032565b505050565b600354600160a01b900460ff16610bfb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109da565b6118a761184f565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016109da565b805160201461197c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109da565b610f996119888261322d565b612193565b6002600754036119df5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109da565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a0c57611a0c612e12565b14611a4f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109da565b611a838484602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b90505b9392505050565b6000848152600b602052604090205460ff16611b8257611aac8361260a565b6000611ae28584602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b9050838114611b295760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109da565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611b789086815260200190565b60405180910390a3505b50505050565b600080611b95838261276a565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bcd62ffffff19831661278e565b63ffffffff1614611c0f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109da565b6000611c2062ffffff1983166127a3565b905060016000828152600f602052604090205460ff166002811115611c4757611c47612e12565b14611c7e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109da565b6000818152600f60205260409020805460ff191660021790556001611ce37f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061301f565b611ced919061316a565b5a11611d245760405162461bcd60e51b81526004016109da906020808252600490820152632167617360e01b604082015260600190565b6000611d3562ffffff1984166127ec565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611d9062ffffff1988166127fd565b611d9f62ffffff198916612811565b611dae62ffffff198a16612826565b611dcb611dc062ffffff198c1661283b565b62ffffff1916612869565b604051602401611dde9493929190613254565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e188585600086856128b2565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e519088908b908690613283565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f6b576040519150601f19603f3d011682016040523d82523d6000602084013e611f70565b606091505b505090508061184a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109da565b611fef611744565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118d73390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036121205760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109da565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610c98565b6060868686868686604051602001612178969594939291906132a4565b60405160208183030381529060405290509695505050505050565b806121d15760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109da565b600081815260096020526040902054156122245760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109da565b6000818152600a602052604090205460ff16156122795760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109da565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610c989083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061264d5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109da565b6000818152600a602052604090205460ff16156126675750565b600081815260096020526040812054908190036126bd5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109da565b6008546126ca824361316a565b10156127185760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109da565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161278564ffffffffff8516828461293d565b95945050505050565b600061153b62ffffff1983166028600461297a565b6000806127b98360781c6001600160601b031690565b6001600160601b0316905060006127d98460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061153b6127fa836129aa565b90565b600061153b62ffffff19831682600461297a565b600061153b62ffffff1983166024600461297a565b600061153b62ffffff198316600460206129bb565b600061153b604c61285981601886901c6001600160601b031661316a565b62ffffff19851691906000612ac6565b60606000806128818460181c6001600160601b031690565b6001600160601b0316905060405191508192506128a18483602001612b42565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156128d8576128d8612d3a565b6040519080825280601f01601f191660200182016040528015612902576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612923578692505b828152826000602083013e90999098509650505050505050565b60008061294a838561301f565b905060405181111561295a575060005b8060000361296f5762ffffff19915050611a86565b612785858585612c35565b60006129878260206132fe565b612992906008613317565b60ff166129a08585856129bb565b901c949350505050565b600061153b62ffffff198316602c60205b60008160ff166000036129d057506000611a86565b6129e38460181c6001600160601b031690565b6001600160601b03166129f960ff84168561301f565b1115612a6157612a128460781c6001600160601b031690565b612a258560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109da565b60208260ff161115612a865760405163045df3f960e01b815260040160405180910390fd5b600882026000612a9f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612adc8660781c6001600160601b031690565b6001600160601b03169050612af086612cac565b84612afb878461301f565b612b05919061301f565b1115612b185762ffffff19915050612b3a565b612b22858261301f565b9050612b368364ffffffffff16828661293d565b9150505b949350505050565b600062ffffff1980841603612b6a5760405163148d513360e21b815260040160405180910390fd5b612b7383612ce5565b15612b9157604051632ee0949160e11b815260040160405180910390fd5b6000612ba68460181c6001600160601b031690565b6001600160601b031690506000612bc68560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612be75760206060fd5b8386858560045afa905080612c0f57604051632af1bd9b60e21b815260040160405180910390fd5b612c2a612c1c8860d81c90565b64ffffffffff168786612c35565b979650505050505050565b60006060601883856001600160601b03821682148015612c5d575086816001600160601b0316145b612c965760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109da565b96831b90961790911b90941790931b9392505050565b6000612cc18260181c6001600160601b031690565b612cd48360781c6001600160601b031690565b016001600160601b03169050919050565b6000612cf18260d81c90565b64ffffffffff1664ffffffffff03612d0b57506001919050565b6000612d1683612cac565b604051109392505050565b600060208284031215612d3357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d6157600080fd5b813567ffffffffffffffff80821115612d7c57612d7c612d3a565b604051601f8301601f19908116603f01168101908282118183101715612da457612da4612d3a565b81604052838152866020858801011115612dbd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612def57600080fd5b813567ffffffffffffffff811115612e0657600080fd5b612b3a84828501612d50565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e4a57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060006104608688031215612e6957600080fd5b853567ffffffffffffffff80821115612e8157600080fd5b818801915088601f830112612e9557600080fd5b813581811115612ea457600080fd5b8960208260051b8501011115612eb957600080fd5b602092830197509550508601359250610440860187811115612eda57600080fd5b94979396509194604001933592915050565b600060208284031215612efe57600080fd5b81356001600160a01b0381168114611a8657600080fd5b803563ffffffff81168114612f2957600080fd5b919050565b600060208284031215612f4057600080fd5b611a8682612f15565b600080600060608486031215612f5e57600080fd5b612f6784612f15565b925060208401359150604084013567ffffffffffffffff811115612f8a57600080fd5b612f9686828701612d50565b9150509250925092565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f01601f19169290920160200192915050565b828152604060208201526000611a836040830184612fc4565b634e487b7160e01b600052601160045260246000fd5b8082018082111561153b5761153b613009565b60006020828403121561304457600080fd5b5051919050565b60608152600061305e6060830186612fc4565b82810360208401526130708186612fc4565b91505060018060a01b0383166040830152949350505050565b60408152600061309c6040830185612fc4565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126130e057600080fd5b9190910192915050565b6000808335601e1984360301811261310157600080fd5b83018035915067ffffffffffffffff82111561311c57600080fd5b60200191503681900382131561313157600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561315a57600080fd5b81518015158114611a8657600080fd5b8181038181111561153b5761153b613009565b600063ffffffff80831681810361319657613196613009565b6001019392505050565b600080604083850312156131b357600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006131e96080830184612fc4565b9695505050505050565b6001600160a01b0381811683821601908082111561321357613213613009565b5092915050565b602081526000611a866020830184612fc4565b8051602080830151919081101561324e576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526131e96080830184612fc4565b83815282151560208201526060604082015260006127856060830184612fc4565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516132ec81604c850160208701612fa0565b91909101604c01979650505050505050565b60ff828116828216039081111561153b5761153b613009565b60ff81811683821602908116908181146132135761321361300956fea26469706673582212203324c0a31570b770dcaed9a52ea128dcf86ee78b7615426a61248186df3f62c064736f6c63430008110033",
  "deployedBytecode": "0x60806040526004361061028c5760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d6114610887578063d7d317b3146108bb578063d88beda2146108d1578063db1b765914610905578063e0fed01014610925578063fa31de011461094557600080fd5b8063b95a2001146107c2578063c5b350df146107f5578063cc3942831461080a578063d1851c921461082a578063d232c22014610848578063d2a3cc711461086757600080fd5b8063a01892a511610113578063a01892a5146106f8578063a792c29b1461072c578063ad9c0c2e1461074c578063b1f8100d14610762578063b2f8764314610782578063b697f531146107a257600080fd5b80638456cb59146106225780638d3638f4146106375780638da5cb5b1461066a57806398c9f2b9146106885780639d3117c7146106b85780639fa92f9d146106e557600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461057257806365eaf11b146105a257806368742da6146105b75780636a42b8f8146105d75780636b04a933146105ed578063715018a61461060d57600080fd5b806352a9674b1461046d578063572386ca146104a1578063579c1618146104d15780635bd11efc146104e75780635c975abb146105075780635f61e3ec1461052657600080fd5b8063301f07c311610250578063301f07c31461039a5780633cf52ffb146103da5780633f4ba83a146103ef5780634ff746f614610404578063508a109b146104245780635190bc531461044457600080fd5b806314168416146102985780631eeaabea146102e657806325e3beda146103085780632bb1ae7c1461034a5780632bbd59ca1461035d57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102f257600080fd5b50610306610301366004612d21565b610973565b005b34801561031457600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102dd565b610306610358366004612ddd565b610a1d565b34801561036957600080fd5b5061038d610378366004612d21565b600f6020526000908152604090205460ff1681565b6040516102dd9190612e28565b3480156103a657600080fd5b506103ca6103b5366004612d21565b600a6020526000908152604090205460ff1681565b60405190151581526020016102dd565b3480156103e657600080fd5b5060025461033c565b3480156103fb57600080fd5b50610306610bc0565b34801561041057600080fd5b5061030661041f366004612ddd565b610bfd565b34801561043057600080fd5b5061030661043f366004612e50565b610ca3565b34801561045057600080fd5b506103ca61045f366004612eec565b6001600160a01b0316301490565b34801561047957600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b506103ca6104bc366004612d21565b600c6020526000908152604090205460ff1681565b3480156104dd57600080fd5b5061033c60055481565b3480156104f357600080fd5b50610306610502366004612eec565b610f65565b34801561051357600080fd5b50600354600160a01b900460ff166103ca565b34801561053257600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dd565b34801561057e57600080fd5b506103ca61058d366004612eec565b600d6020526000908152604090205460ff1681565b3480156105ae57600080fd5b5061033c610f9c565b3480156105c357600080fd5b506103066105d2366004612eec565b611025565b3480156105e357600080fd5b5062093a8061033c565b3480156105f957600080fd5b50610306610608366004612d21565b6110a2565b34801561061957600080fd5b5061030661116d565b34801561062e57600080fd5b50610306611198565b34801561064357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102cc565b34801561067657600080fd5b506000546001600160a01b031661055a565b34801561069457600080fd5b506103ca6106a3366004612d21565b600b6020526000908152604090205460ff1681565b3480156106c457600080fd5b5061033c6106d3366004612d21565b60096020526000908152604090205481565b3480156106f157600080fd5b503061055a565b34801561070457600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073857600080fd5b5060045461055a906001600160a01b031681565b34801561075857600080fd5b5061033c60085481565b34801561076e57600080fd5b5061030661077d366004612eec565b61124c565b34801561078e57600080fd5b5061030661079d366004612eec565b6112ea565b3480156107ae57600080fd5b506103066107bd366004612eec565b611366565b3480156107ce57600080fd5b506102cc6107dd366004612f2e565b600e6020526000908152604090205463ffffffff1681565b34801561080157600080fd5b506103066113e5565b34801561081657600080fd5b5060035461055a906001600160a01b031681565b34801561083657600080fd5b506001546001600160a01b031661055a565b34801561085457600080fd5b506000546001600160a01b0316156103ca565b34801561087357600080fd5b50610306610882366004612eec565b611455565b34801561089357600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c757600080fd5b5061033c60065481565b3480156108dd57600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091157600080fd5b506103ca610920366004612eec565b61152c565b34801561093157600080fd5b50610306610940366004612d21565b611541565b34801561095157600080fd5b50610965610960366004612f49565b611575565b6040516102dd929190612ff0565b6000546001600160a01b0316331461099e576040516311a8a1bb60e31b815260040160405180910390fd5b60085481036109e35760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a25611744565b43600554600654610a36919061301f565b1115610a55576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190613032565b6000818152600c602052604090205490915060ff1615610b365760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109da565b600081604051602001610b4b91815260200190565b6040516020818303038152906040529050610b668184611791565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bb39083908690339061304b565b60405180910390a1505050565b6000546001600160a01b03163314610beb576040516311a8a1bb60e31b815260040160405180910390fd5b610bf361184f565b610bfb61189f565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c5e5760405162461bcd60e51b81526004016109da9060208082526004908201526310a0a6a160e11b604082015260600190565b610c67816118f4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610c98929190613089565b60405180910390a150565b610cab611744565b610cb361198d565b83610cea5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109da565b600085856000818110610cff57610cff6130b3565b9050602002810190610d1191906130c9565b610d1b90806130ea565b604051610d29929190613138565b604051809103902090506000610d908288886000818110610d4c57610d4c6130b3565b9050602002810190610d5e91906130c9565b60200189896000818110610d7457610d746130b3565b9050602002810190610d8691906130c9565b61042001356119e6565b9050610d9e81868686611a8d565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ec45788888263ffffffff16818110610de357610de36130b3565b9050602002810190610df591906130c9565b610dff90806130ea565b604051610e0d929190613138565b604051809103902093506000610e62858b8b8563ffffffff16818110610e3557610e356130b3565b9050602002810190610e4791906130c9565b6020018c8c8663ffffffff16818110610d7457610d746130b3565b9050838114610ea15760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109da565b506000848152600f60205260409020805460ff1916600190811790915501610dbd565b5060005b818163ffffffff161015610f5057610f4789898363ffffffff16818110610ef157610ef16130b3565b9050602002810190610f0391906130c9565b610f0d90806130ea565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8892505050565b50600101610ec8565b50505050610f5e6001600755565b5050505050565b6000546001600160a01b03163314610f90576040516311a8a1bb60e31b815260040160405180910390fd5b610f9981611e65565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190613032565b905090565b6000546001600160a01b03163314611050576040516311a8a1bb60e31b815260040160405180910390fd5b4761105b8282611ece565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161109691815260200190565b60405180910390a25050565b6000546001600160a01b031633146110cd576040516311a8a1bb60e31b815260040160405180910390fd5b6110d561184f565b600081815260096020526040812054900361112a5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109da565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610c989083815260200190565b6000546001600160a01b03163314610bfb576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190613148565b61123c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109da565b611244611744565b610bfb611fe7565b6000546001600160a01b03163314611277576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611295575060025415155b156112b3576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112e157604051634a2fb73f60e11b815260040160405180910390fd5b610f998161202a565b6000546001600160a01b03163314611315576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610c98565b6000546001600160a01b03163314611391576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610c98565b6001546001600160a01b03163314611410576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611422919061316a565b11611440576040516324e0285f60e21b815260040160405180910390fd5b600154610bfb906001600160a01b0316612078565b6000546001600160a01b03163314611480576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114de5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109da565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610c98565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461156c576040516311a8a1bb60e31b815260040160405180910390fd5b610f99816120dd565b336000908152600d602052604081205460609060ff166115c65760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109da565b63ffffffff8086166000908152600e60205260408120805491929190911690826115ef8361317d565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061164e7f0000000000000000000000000000000000000000000000000000000000000000611645336001600160a01b031690565b848a8a8a61215b565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906131a0565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361171a60018461316a565b848760405161172c94939291906131c4565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610bfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109da565b8051156117cf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109da565b6117dc61800060086131f3565b6001600160a01b03166362f84b24836040518263ffffffff1660e01b8152600401611807919061321a565b6020604051808303816000875af1158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a9190613032565b505050565b600354600160a01b900460ff16610bfb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109da565b6118a761184f565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016109da565b805160201461197c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109da565b610f996119888261322d565b612193565b6002600754036119df5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109da565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a0c57611a0c612e12565b14611a4f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109da565b611a838484602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b90505b9392505050565b6000848152600b602052604090205460ff16611b8257611aac8361260a565b6000611ae28584602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b9050838114611b295760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109da565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611b789086815260200190565b60405180910390a3505b50505050565b600080611b95838261276a565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bcd62ffffff19831661278e565b63ffffffff1614611c0f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109da565b6000611c2062ffffff1983166127a3565b905060016000828152600f602052604090205460ff166002811115611c4757611c47612e12565b14611c7e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109da565b6000818152600f60205260409020805460ff191660021790556001611ce37f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061301f565b611ced919061316a565b5a11611d245760405162461bcd60e51b81526004016109da906020808252600490820152632167617360e01b604082015260600190565b6000611d3562ffffff1984166127ec565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611d9062ffffff1988166127fd565b611d9f62ffffff198916612811565b611dae62ffffff198a16612826565b611dcb611dc062ffffff198c1661283b565b62ffffff1916612869565b604051602401611dde9493929190613254565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e188585600086856128b2565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e519088908b908690613283565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f6b576040519150601f19603f3d011682016040523d82523d6000602084013e611f70565b606091505b505090508061184a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109da565b611fef611744565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118d73390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036121205760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109da565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610c98565b6060868686868686604051602001612178969594939291906132a4565b60405160208183030381529060405290509695505050505050565b806121d15760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109da565b600081815260096020526040902054156122245760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109da565b6000818152600a602052604090205460ff16156122795760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109da565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610c989083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061264d5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109da565b6000818152600a602052604090205460ff16156126675750565b600081815260096020526040812054908190036126bd5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109da565b6008546126ca824361316a565b10156127185760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109da565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161278564ffffffffff8516828461293d565b95945050505050565b600061153b62ffffff1983166028600461297a565b6000806127b98360781c6001600160601b031690565b6001600160601b0316905060006127d98460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061153b6127fa836129aa565b90565b600061153b62ffffff19831682600461297a565b600061153b62ffffff1983166024600461297a565b600061153b62ffffff198316600460206129bb565b600061153b604c61285981601886901c6001600160601b031661316a565b62ffffff19851691906000612ac6565b60606000806128818460181c6001600160601b031690565b6001600160601b0316905060405191508192506128a18483602001612b42565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156128d8576128d8612d3a565b6040519080825280601f01601f191660200182016040528015612902576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612923578692505b828152826000602083013e90999098509650505050505050565b60008061294a838561301f565b905060405181111561295a575060005b8060000361296f5762ffffff19915050611a86565b612785858585612c35565b60006129878260206132fe565b612992906008613317565b60ff166129a08585856129bb565b901c949350505050565b600061153b62ffffff198316602c60205b60008160ff166000036129d057506000611a86565b6129e38460181c6001600160601b031690565b6001600160601b03166129f960ff84168561301f565b1115612a6157612a128460781c6001600160601b031690565b612a258560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109da565b60208260ff161115612a865760405163045df3f960e01b815260040160405180910390fd5b600882026000612a9f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612adc8660781c6001600160601b031690565b6001600160601b03169050612af086612cac565b84612afb878461301f565b612b05919061301f565b1115612b185762ffffff19915050612b3a565b612b22858261301f565b9050612b368364ffffffffff16828661293d565b9150505b949350505050565b600062ffffff1980841603612b6a5760405163148d513360e21b815260040160405180910390fd5b612b7383612ce5565b15612b9157604051632ee0949160e11b815260040160405180910390fd5b6000612ba68460181c6001600160601b031690565b6001600160601b031690506000612bc68560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612be75760206060fd5b8386858560045afa905080612c0f57604051632af1bd9b60e21b815260040160405180910390fd5b612c2a612c1c8860d81c90565b64ffffffffff168786612c35565b979650505050505050565b60006060601883856001600160601b03821682148015612c5d575086816001600160601b0316145b612c965760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109da565b96831b90961790911b90941790931b9392505050565b6000612cc18260181c6001600160601b031690565b612cd48360781c6001600160601b031690565b016001600160601b03169050919050565b6000612cf18260d81c90565b64ffffffffff1664ffffffffff03612d0b57506001919050565b6000612d1683612cac565b604051109392505050565b600060208284031215612d3357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d6157600080fd5b813567ffffffffffffffff80821115612d7c57612d7c612d3a565b604051601f8301601f19908116603f01168101908282118183101715612da457612da4612d3a565b81604052838152866020858801011115612dbd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612def57600080fd5b813567ffffffffffffffff811115612e0657600080fd5b612b3a84828501612d50565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e4a57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060006104608688031215612e6957600080fd5b853567ffffffffffffffff80821115612e8157600080fd5b818801915088601f830112612e9557600080fd5b813581811115612ea457600080fd5b8960208260051b8501011115612eb957600080fd5b602092830197509550508601359250610440860187811115612eda57600080fd5b94979396509194604001933592915050565b600060208284031215612efe57600080fd5b81356001600160a01b0381168114611a8657600080fd5b803563ffffffff81168114612f2957600080fd5b919050565b600060208284031215612f4057600080fd5b611a8682612f15565b600080600060608486031215612f5e57600080fd5b612f6784612f15565b925060208401359150604084013567ffffffffffffffff811115612f8a57600080fd5b612f9686828701612d50565b9150509250925092565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f01601f19169290920160200192915050565b828152604060208201526000611a836040830184612fc4565b634e487b7160e01b600052601160045260246000fd5b8082018082111561153b5761153b613009565b60006020828403121561304457600080fd5b5051919050565b60608152600061305e6060830186612fc4565b82810360208401526130708186612fc4565b91505060018060a01b0383166040830152949350505050565b60408152600061309c6040830185612fc4565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126130e057600080fd5b9190910192915050565b6000808335601e1984360301811261310157600080fd5b83018035915067ffffffffffffffff82111561311c57600080fd5b60200191503681900382131561313157600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561315a57600080fd5b81518015158114611a8657600080fd5b8181038181111561153b5761153b613009565b600063ffffffff80831681810361319657613196613009565b6001019392505050565b600080604083850312156131b357600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006131e96080830184612fc4565b9695505050505050565b6001600160a01b0381811683821601908082111561321357613213613009565b5092915050565b602081526000611a866020830184612fc4565b8051602080830151919081101561324e576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526131e96080830184612fc4565b83815282151560208201526060604082015260006127856060830184612fc4565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516132ec81604c850160208701612fa0565b91909101604c01979650505050505050565b60ff828116828216039081111561153b5761153b613009565b60ff81811683821602908116908181146132135761321361300956fea26469706673582212203324c0a31570b770dcaed9a52ea128dcf86ee78b7615426a61248186df3f62c064736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
