{
  "_format": "hh-sol-artifact-1",
  "contractName": "SomaEarn",
  "sourceName": "contracts/soma/SomaEarn/SomaEarn.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "prevStartDate",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "prevEndDate",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "newStartDate",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "newEndDate",
          "type": "uint48"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "DatesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "DelegationAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "percentLocked",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "lockDuration",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct ISomaEarn.DelegationConfig",
          "name": "prevConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "percentLocked",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "lockDuration",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct ISomaEarn.DelegationConfig",
          "name": "newConfig",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "DelegationConfigUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "fromPoolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "toPoolId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "DelegationMoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxUserDelegation",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxTotalDelegation",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "requiredPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "PoolUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "prevPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RequiredPrivilegesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TokenCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TokensRecovered",
      "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": "prevTo",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newTo",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "WithdrawToUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PRIVILEGES",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA_EARN_TOKEN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_RECOVERY_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegationConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "percentLocked",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "lockDuration",
              "type": "uint8"
            }
          ],
          "internalType": "struct ISomaEarn.DelegationConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "enabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endDate",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "id",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_withdrawTo",
          "type": "address"
        },
        {
          "internalType": "uint48",
          "name": "_initStartDate",
          "type": "uint48"
        },
        {
          "internalType": "uint48",
          "name": "_initEndDate",
          "type": "uint48"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "maxTotalDelegation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "maxUserDelegation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "fromPoolId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "toPoolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "moveDelegation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "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": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "recoverTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredPrivileges",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "requiredPrivileges",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "setWithdrawTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startDate",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "token",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint48",
          "name": "_newStartDate",
          "type": "uint48"
        },
        {
          "internalType": "uint48",
          "name": "_newEndDate",
          "type": "uint48"
        }
      ],
      "name": "updateDateConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "percentLocked",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "lockDuration",
              "type": "uint8"
            }
          ],
          "internalType": "struct ISomaEarn.DelegationConfig",
          "name": "_newConfig",
          "type": "tuple"
        }
      ],
      "name": "updateDelegationConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_maxUserDelegation",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxTotalDelegation",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_requiredPrivileges",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "_enabled",
          "type": "bool"
        }
      ],
      "name": "updatePool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "newRequiredPrivileges",
          "type": "bytes32"
        }
      ],
      "name": "updateRequiredPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "userDelegation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf6080526001600160401b0360a05234801561003357600080fd5b5060805160a0516134a861009f60003960006103440152600081816103e201528181610681015281816108b30152818161094f01528181610a0501528181610b0f01528181610d2601528181610dc20152818161100c015281816110a8015261176c01526134a86000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80638bcd3e931161013b578063c5504b4f116100b8578063e5339bac1161007c578063e5339bac146105fc578063e6062e1a1461060f578063eec47d6014610622578063ef63d57c1461062c578063fd4fb9791461063f57600080fd5b8063c5504b4f1461053b578063cf9e4e521461054e578063d482cbeb14610561578063d8697598146105cb578063e2481dbd146105f257600080fd5b8063ac9650d8116100ff578063ac9650d8146104c2578063af640d0f146104e2578063ba815590146104ec578063c203823614610510578063c24a0f8b1461052357600080fd5b80638bcd3e931461045a5780638eb7cb381461046e57806391d148541461048157806391faef6314610494578063929c8a8a146104af57600080fd5b80633f4ba83a116101c9578063662580681161018d57806366258068146104045780636b33e45d14610419578063791dff691461042c5780638456cb591461043f57806388f77c421461044757600080fd5b80633f4ba83a146103a75780634b63885a146103af5780635c975abb146103c25780635f3e849f146103ca57806363727fc2146103dd57600080fd5b8063248a9ca311610210578063248a9ca3146103195780632772ce9d1461032c5780632a7a0c681461033f5780632e1a7d4d1461036657806338d52e0f1461037b57600080fd5b806301ffc9a71461024d578063057acee3146102755780630b97bc86146102be5780631e26571f146102e9578063227102a6146102f2575b600080fd5b61026061025b366004612d28565b610652565b60405190151581526020015b60405180910390f35b6102b0610283366004612d67565b60008281526101cb602090815260408083206001600160a01b038516845260030190915290205492915050565b60405190815260200161026c565b6101ca54600160a01b900465ffffffffffff165b60405165ffffffffffff909116815260200161026c565b610162546102b0565b6102b07ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b6102b0610327366004612d97565b61067d565b61026061033a366004612d97565b61076f565b6102b07f000000000000000000000000000000000000000000000000000000000000000081565b610379610374366004612d97565b610837565b005b6101c95461038f906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6103796108a2565b6102606103bd366004612db0565b610a01565b610260610b0b565b6103796103d8366004612dcd565b610ba4565b61038f7f000000000000000000000000000000000000000000000000000000000000000081565b6102b060008051602061347c83398151915281565b610379610427366004612db0565b610d15565b61037961043a366004612e0e565b610e72565b610379610ffb565b610379610455366004612e3c565b611157565b6101ca5461038f906001600160a01b031681565b61037961047c366004612e9e565b611319565b61026061048f366004612d67565b611768565b61038f739c80fd7d6d0e064ad72f42ec60a8386b944c49e981565b6103796104bd366004612ec0565b611866565b6104d56104d0366004612eec565b611cd9565b60405161026c9190612fb1565b6102b06101c85481565b6102606104fa366004612d97565b60009081526101cb602052604090205460ff1690565b6102b061051e366004612d67565b611dce565b6101ca54600160d01b900465ffffffffffff166102d2565b6102b0610549366004612d97565b611e45565b61037961055c366004613021565b611e8b565b6105be61056f366004612db0565b6040805180820190915260008082526020820152506001600160a01b031660009081526101cc602090815260409182902082518084019093525460ff8082168452610100909104169082015290565b60405161026c919061306e565b6102b07f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6102b06101c75481565b6102b061060a366004612d97565b612050565b61038f61061d366004612d97565b612096565b6102b06101615481565b6102b061063a366004612d97565b6120e3565b61037961064d36600461308c565b612158565b60006001600160e01b0319821663da7389a160e01b14806106775750610677826121af565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070191906130bf565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161072e91815260200190565b602060405180830381865afa15801561074b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067791906130dc565b600061077f6101615461048f3390565b806107af57506107af7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133611768565b6108265760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084015b60405180910390fd5b61082f826121d4565b506001919050565b3361085060008051602061347c83398151915282611768565b8061086357506108636101c75482611768565b61087f5760405162461bcd60e51b815260040161081d906130f5565b6101ca546101c95461089e916001600160a01b03918216911684612219565b5050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093391906130bf565b6001600160a01b031614806109da5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf91906130bf565b6001600160a01b0316145b6109f65760405162461bcd60e51b815260040161081d90613123565b6109fe61227c565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8591906130bf565b6001600160a01b031663253bd7b783610a9e6101625490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610677919061315a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f919061315a565b80610b9f57505060335460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd610bcf8133611768565b610c4b5760405162461bcd60e51b815260206004820152604160248201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60448201527f6f7420686176652074686520617070726f70726961746520617574686f7269746064820152607960f81b608482015260a40161081d565b610c5761012d856122ce565b15610ca45760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e00000000604482015260640161081d565b610cb86001600160a01b0385168484612219565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d53885604051610d0791815260200190565b60405180910390a450505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da691906130bf565b6001600160a01b03161480610e4d5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4291906130bf565b6001600160a01b0316145b610e695760405162461bcd60e51b815260040161081d90613123565b61089e826122f0565b610e7a61235d565b3360008181526101cc602090815260409182902082518084019093525460ff80821684526101009091041682820152606490610eb890850185613186565b60ff161115610f095760405162461bcd60e51b815260206004820152601960248201527f536f6d614561726e3a20494e56414c49442050455243454e5400000000000000604482015260640161081d565b6101ca5442600160a01b90910465ffffffffffff161115610f3c5760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff164210610f935760405162461bcd60e51b815260206004820152601360248201527214dbdb5851585c9b8e8810d3d3541311551151606a1b604482015260640161081d565b6001600160a01b03821660009081526101cc602052604090208390610fb882826131d2565b505060405133907fa422a24d6fdaf3da53364ae199448f1d326b0001530b7888afd0f50a805d09a490610fee9084908790613216565b60405180910390a2505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c91906130bf565b6001600160a01b031614806111335750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112891906130bf565b6001600160a01b0316145b61114f5760405162461bcd60e51b815260040161081d90613123565b6109fe6123a7565b600054610100900460ff16158080156111775750600054600160ff909116105b806111915750303b158015611191575060005460ff166001145b6111f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161081d565b6000805460ff191660011790558015611217576000805461ff0019166101001790555b6040516bffffffffffffffffffffffff193060601b16602082015260008051602061347c833981519152603482015260540160408051601f1981840301815291905280516020909101206101c75561126d6123e4565b61127561241c565b60408051600081526020810190915261128d9061244b565b6101c88690556101c980546001600160a01b0319166001600160a01b0387161790556112b8856124bd565b6112c1846122f0565b6112cb83836124c9565b8015611311576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b61132161235d565b600261019554036113445760405162461bcd60e51b815260040161081d9061327c565b60026101955560008281526101cb60205260409020338261139f5760405162461bcd60e51b815260206004820152601560248201527414dbdb5851585c9b8e8816915493c8105353d55395605a1b604482015260640161081d565b815460ff166113c05760405162461bcd60e51b815260040161081d906132b3565b6101ca5442600160a01b90910465ffffffffffff1611156113f35760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff1642106114545760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a2044454c45474154494f4e5320434f4d504c4554454400604482015260640161081d565b6101c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c291906130dc565b6101c9549091506114de906001600160a01b03168330876125b2565b6101c9546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155091906130dc565b61155a9190613300565b9050600061156787612096565b6040516340c10f1960e01b81526001600160a01b03868116600483015260248201859052919250908216906340c10f1990604401600060405180830381600087803b1580156115b557600080fd5b505af11580156115c9573d6000803e3d6000fd5b505050506001600160a01b0384166000908152600386016020526040812080548892906115f7908490613313565b925050819055508460020154816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166591906130dc565b11156116b35760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a204d41585f44454c45474154494f4e5f45584345454400604482015260640161081d565b60018501546001600160a01b038516600090815260038701602052604090205411156117215760405162461bcd60e51b815260206004820152601d60248201527f536f6d614561726e3a204d41585f555345525f44454c45474154494f4e000000604482015260640161081d565b604051828152339088907f93d4580cc943a8bbdef8385c59786f03752abe9c98d7035471a57b6018c934e9906020015b60405180910390a350506001610195555050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906130bf565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f919061315a565b9392505050565b61186e61235d565b600261019554036118915760405162461bcd60e51b815260040161081d9061327c565b60026101955560008381526101cb60205260408082208483529120338486036118f35760405162461bcd60e51b8152602060048201526014602482015273536f6d614561726e3a2053414d4520504f4f4c5360601b604482015260640161081d565b6101ca5442600160a01b90910465ffffffffffff1611156119265760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff1642106119875760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a2044454c45474154494f4e5320434f4d504c4554454400604482015260640161081d565b600084116119cf5760405162461bcd60e51b815260206004820152601560248201527414dbdb5851585c9b8e8816915493c8105353d55395605a1b604482015260640161081d565b825460ff166119f05760405162461bcd60e51b815260040161081d906132b3565b815460ff16611a115760405162461bcd60e51b815260040161081d906132b3565b6000611a1c87612096565b604051632770a7eb60e21b81526001600160a01b0384811660048301526024820188905291925090821690639dc29fac90604401600060405180830381600087803b158015611a6a57600080fd5b505af1158015611a7e573d6000803e3d6000fd5b50505050506000611a8e86612096565b6040516340c10f1960e01b81526001600160a01b03848116600483015260248201889052919250908216906340c10f1990604401600060405180830381600087803b158015611adc57600080fd5b505af1158015611af0573d6000803e3d6000fd5b5050506001600160a01b038316600090815260038601602052604081208054889450909250611b20908490613300565b90915550506001600160a01b038116600090815260038301602052604081208054869290611b4f908490613313565b9091555060009050611b6086612096565b90508260020154816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc991906130dc565b1115611c175760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a204d41585f44454c45474154494f4e5f45584345454400604482015260640161081d565b60018301546001600160a01b03831660009081526003850160205260409020541115611c855760405162461bcd60e51b815260206004820152601d60248201527f536f6d614561726e3a204d41585f555345525f44454c45474154494f4e000000604482015260640161081d565b336001600160a01b031686887fb2f65a0d3a3bd76a45462d4c8f89fdfa1feb6480eade68dd855f6d1594e02f5488604051611cc291815260200190565b60405180910390a450506001610195555050505050565b60608167ffffffffffffffff811115611cf457611cf4613266565b604051908082528060200260200182016040528015611d2757816020015b6060815260200190600190039081611d125790505b50905060005b82811015611dc757611d9730858584818110611d4b57611d4b613326565b9050602002810190611d5d919061333c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125f092505050565b828281518110611da957611da9613326565b60200260200101819052508080611dbf9061338a565b915050611d2d565b5092915050565b6000611dd983612096565b6040516370a0823160e01b81526001600160a01b03848116600483015291909116906370a0823190602401602060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f91906130dc565b60008181526101cb602052604081205460ff16611e745760405162461bcd60e51b815260040161081d906133a3565b5060009081526101cb602052604090206002015490565b33611ea460008051602061347c83398151915282611768565b80611eb75750611eb76101c75482611768565b611ed35760405162461bcd60e51b815260040161081d906130f5565b60026101955403611ef65760405162461bcd60e51b815260040161081d9061327c565b60026101955583851115611f585760405162461bcd60e51b815260206004820152602360248201527f536f6d614561726e3a20494e56414c49445f44454c45474154494f4e5f4c494d60448201526249545360e81b606482015260840161081d565b60008681526101cb602052604090206002810185905560018101869055805460ff1916831515908117825560ff161561200657611f94876126e4565b6001600160a01b0316632772ce9d856040518263ffffffff1660e01b8152600401611fc191815260200190565b6020604051808303816000875af1158015611fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612004919061315a565b505b60408051878152602081018790529081018590528315156060820152339088907f06ebee08997f5dd32a199a57b1e79fa371861860854b5df78318ac7ea07abee090608001611751565b60008181526101cb602052604081205460ff1661207f5760405162461bcd60e51b815260040161081d906133a3565b5060009081526101cb602052604090206001015490565b60008181526101cb602052604081205460ff166120c55760405162461bcd60e51b815260040161081d906133a3565b610677739c80fd7d6d0e064ad72f42ec60a8386b944c49e9836127b5565b60008181526101cb602052604081205460ff166121125760405162461bcd60e51b815260040161081d906133a3565b61211b82612096565b6001600160a01b0316631e26571f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074b573d6000803e3d6000fd5b3361217160008051602061347c83398151915282611768565b8061218457506121846101c75482611768565b6121a05760405162461bcd60e51b815260040161081d906130f5565b6121aa83836124c9565b505050565b60006001600160e01b03198216630e46e23b60e31b148061067757506106778261281b565b61016254604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261016255565b6040516001600160a01b0383166024820152604481018290526121aa90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612840565b612284612912565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381166000908152600183016020526040812054151561185f565b6101ca54604080516001600160a01b0392831681529183166020830152805133927fe9749b9cfc1a71f1d982618f21a5b03b6a9dd68c6d960ed823f56b6ac931ea5192908290030190a26101ca80546001600160a01b0319166001600160a01b0392909216919091179055565b612365610b0b565b156123a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161081d565b565b6123af61235d565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122b13390565b6123ec61295d565b6123f461295d565b6123fc612984565b61240461295d565b61240c61295d565b61241461295d565b6123a5612a16565b600054610100900460ff166124435760405162461bcd60e51b815260040161081d906133da565b600161019555565b600054610100900460ff166124725760405162461bcd60e51b815260040161081d906133da565b60005b815181101561089e576124ac82828151811061249357612493613326565b602002602001015161012d612a4990919063ffffffff16565b506124b68161338a565b9050612475565b61089e61012d82612a49565b6101ca5460408051600160a01b830465ffffffffffff9081168252600160d01b909304831660208201528483168183015291831660608301525133917f6ca09cec37cd86fcfa33cf8defae0d93e9f8e62318b99a6e875a4644e897ddc0919081900360800190a26101ca5465ffffffffffff838116600160a01b9092041614612570576101ca805465ffffffffffff60a01b1916600160a01b65ffffffffffff8516021790555b6101ca5465ffffffffffff828116600160d01b909204161461089e576101ca805465ffffffffffff8316600160d01b026001600160d01b039091161790555050565b6040516001600160a01b03808516602483015283166044820152606481018290526125ea9085906323b872dd60e01b90608401612245565b50505050565b60606001600160a01b0383163b6126585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161081d565b600080846001600160a01b0316846040516126739190613425565b600060405180830381855af49150503d80600081146126ae576040519150601f19603f3d011682016040523d82523d6000602084013e6126b3565b606091505b50915091506126db828260405180606001604052806027815260200161345560279139612a5e565b95945050505050565b60006126ef82612096565b90506001600160a01b0381163b6127b05761271e739c80fd7d6d0e064ad72f42ec60a8386b944c49e983612a97565b50604051639498bd7160e01b8152600481018390526001600160a01b03821690639498bd7190602401600060405180830381600087803b15801561276157600080fd5b505af1158015612775573d6000803e3d6000fd5b50506040516001600160a01b03841692508491507fa3c2da69295bcaba324b997624b6c59792aab58e331a8e878f9673aff68bd24a90600090a35b919050565b600061185f838330604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b60006001600160e01b03198216638757f10760e01b1480610677575061067782612b37565b6000612895826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5c9092919063ffffffff16565b8051909150156121aa57808060200190518101906128b3919061315a565b6121aa5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161081d565b61291a610b0b565b6123a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161081d565b600054610100900460ff166123a55760405162461bcd60e51b815260040161081d906133da565b600054610100900460ff166129ab5760405162461bcd60e51b815260040161081d906133da565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f198184030181529190528051602090910120610161556123a56000196121d4565b600054610100900460ff16612a3d5760405162461bcd60e51b815260040161081d906133da565b6033805460ff19169055565b600061185f836001600160a01b038416612b73565b60608315612a6d57508161185f565b825115612a7d5782518084602001fd5b8160405162461bcd60e51b815260040161081d9190613441565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166106775760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161081d565b60006001600160e01b0319821663b55bd4f760e01b1480610677575061067782612bc2565b6060612b6b8484600085612bf7565b949350505050565b6000818152600183016020526040812054612bba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610677565b506000610677565b60006001600160e01b0319821663d86f1ca160e01b148061067757506301ffc9a760e01b6001600160e01b0319831614610677565b606082471015612c585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161081d565b6001600160a01b0385163b612caf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161081d565b600080866001600160a01b03168587604051612ccb9190613425565b60006040518083038185875af1925050503d8060008114612d08576040519150601f19603f3d011682016040523d82523d6000602084013e612d0d565b606091505b5091509150612d1d828286612a5e565b979650505050505050565b600060208284031215612d3a57600080fd5b81356001600160e01b03198116811461185f57600080fd5b6001600160a01b03811681146109fe57600080fd5b60008060408385031215612d7a57600080fd5b823591506020830135612d8c81612d52565b809150509250929050565b600060208284031215612da957600080fd5b5035919050565b600060208284031215612dc257600080fd5b813561185f81612d52565b600080600060608486031215612de257600080fd5b8335612ded81612d52565b92506020840135612dfd81612d52565b929592945050506040919091013590565b600060408284031215612e2057600080fd5b50919050565b803565ffffffffffff811681146127b057600080fd5b600080600080600060a08688031215612e5457600080fd5b853594506020860135612e6681612d52565b93506040860135612e7681612d52565b9250612e8460608701612e26565b9150612e9260808701612e26565b90509295509295909350565b60008060408385031215612eb157600080fd5b50508035926020909101359150565b600080600060608486031215612ed557600080fd5b505081359360208301359350604090920135919050565b60008060208385031215612eff57600080fd5b823567ffffffffffffffff80821115612f1757600080fd5b818501915085601f830112612f2b57600080fd5b813581811115612f3a57600080fd5b8660208260051b8501011115612f4f57600080fd5b60209290920196919550909350505050565b60005b83811015612f7c578181015183820152602001612f64565b50506000910152565b60008151808452612f9d816020860160208601612f61565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561300657603f19888603018452612ff4858351612f85565b94509285019290850190600101612fd8565b5092979650505050505050565b80151581146109fe57600080fd5b600080600080600060a0868803121561303957600080fd5b85359450602086013593506040860135925060608601359150608086013561306081613013565b809150509295509295909350565b604081016106778284805160ff908116835260209182015116910152565b6000806040838503121561309f57600080fd5b6130a883612e26565b91506130b660208401612e26565b90509250929050565b6000602082840312156130d157600080fd5b815161185f81612d52565b6000602082840312156130ee57600080fd5b5051919050565b602080825260149082015273536f6d614561726e3a2041444d494e204f4e4c5960601b604082015260600190565b6020808252601f908201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c7900604082015260600190565b60006020828403121561316c57600080fd5b815161185f81613013565b60ff811681146109fe57600080fd5b60006020828403121561319857600080fd5b813561185f81613177565b60208082526015908201527414dbdb5851585c9b8e881393d50814d51054951151605a1b604082015260600190565b81356131dd81613177565b60ff8116905081548160ff19821617835560208401356131fc81613177565b61ff008160081b168361ffff198416171784555050505050565b608081016132348285805160ff908116835260209182015116910152565b823561323f81613177565b60ff166040830152602083013561325581613177565b60ff81166060840152509392505050565b634e487b7160e01b600052604160045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f536f6d614561726e3a20504f4f4c2044495341424c4544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610677576106776132ea565b80820180821115610677576106776132ea565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261335357600080fd5b83018035915067ffffffffffffffff82111561336e57600080fd5b60200191503681900382131561338357600080fd5b9250929050565b60006001820161339c5761339c6132ea565b5060010190565b60208082526019908201527f536f6d614561726e3a20494e56414c49445f504f4f4c5f494400000000000000604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251613437818460208701612f61565b9190910192915050565b60208152600061185f6020830184612f8556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ea8754712c89827bf0d2f18b12be70402e54ec47807f26f8d90e6ac21f7b298ca164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c80638bcd3e931161013b578063c5504b4f116100b8578063e5339bac1161007c578063e5339bac146105fc578063e6062e1a1461060f578063eec47d6014610622578063ef63d57c1461062c578063fd4fb9791461063f57600080fd5b8063c5504b4f1461053b578063cf9e4e521461054e578063d482cbeb14610561578063d8697598146105cb578063e2481dbd146105f257600080fd5b8063ac9650d8116100ff578063ac9650d8146104c2578063af640d0f146104e2578063ba815590146104ec578063c203823614610510578063c24a0f8b1461052357600080fd5b80638bcd3e931461045a5780638eb7cb381461046e57806391d148541461048157806391faef6314610494578063929c8a8a146104af57600080fd5b80633f4ba83a116101c9578063662580681161018d57806366258068146104045780636b33e45d14610419578063791dff691461042c5780638456cb591461043f57806388f77c421461044757600080fd5b80633f4ba83a146103a75780634b63885a146103af5780635c975abb146103c25780635f3e849f146103ca57806363727fc2146103dd57600080fd5b8063248a9ca311610210578063248a9ca3146103195780632772ce9d1461032c5780632a7a0c681461033f5780632e1a7d4d1461036657806338d52e0f1461037b57600080fd5b806301ffc9a71461024d578063057acee3146102755780630b97bc86146102be5780631e26571f146102e9578063227102a6146102f2575b600080fd5b61026061025b366004612d28565b610652565b60405190151581526020015b60405180910390f35b6102b0610283366004612d67565b60008281526101cb602090815260408083206001600160a01b038516845260030190915290205492915050565b60405190815260200161026c565b6101ca54600160a01b900465ffffffffffff165b60405165ffffffffffff909116815260200161026c565b610162546102b0565b6102b07ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b6102b0610327366004612d97565b61067d565b61026061033a366004612d97565b61076f565b6102b07f000000000000000000000000000000000000000000000000000000000000000081565b610379610374366004612d97565b610837565b005b6101c95461038f906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6103796108a2565b6102606103bd366004612db0565b610a01565b610260610b0b565b6103796103d8366004612dcd565b610ba4565b61038f7f000000000000000000000000000000000000000000000000000000000000000081565b6102b060008051602061347c83398151915281565b610379610427366004612db0565b610d15565b61037961043a366004612e0e565b610e72565b610379610ffb565b610379610455366004612e3c565b611157565b6101ca5461038f906001600160a01b031681565b61037961047c366004612e9e565b611319565b61026061048f366004612d67565b611768565b61038f739c80fd7d6d0e064ad72f42ec60a8386b944c49e981565b6103796104bd366004612ec0565b611866565b6104d56104d0366004612eec565b611cd9565b60405161026c9190612fb1565b6102b06101c85481565b6102606104fa366004612d97565b60009081526101cb602052604090205460ff1690565b6102b061051e366004612d67565b611dce565b6101ca54600160d01b900465ffffffffffff166102d2565b6102b0610549366004612d97565b611e45565b61037961055c366004613021565b611e8b565b6105be61056f366004612db0565b6040805180820190915260008082526020820152506001600160a01b031660009081526101cc602090815260409182902082518084019093525460ff8082168452610100909104169082015290565b60405161026c919061306e565b6102b07f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6102b06101c75481565b6102b061060a366004612d97565b612050565b61038f61061d366004612d97565b612096565b6102b06101615481565b6102b061063a366004612d97565b6120e3565b61037961064d36600461308c565b612158565b60006001600160e01b0319821663da7389a160e01b14806106775750610677826121af565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070191906130bf565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161072e91815260200190565b602060405180830381865afa15801561074b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067791906130dc565b600061077f6101615461048f3390565b806107af57506107af7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133611768565b6108265760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084015b60405180910390fd5b61082f826121d4565b506001919050565b3361085060008051602061347c83398151915282611768565b8061086357506108636101c75482611768565b61087f5760405162461bcd60e51b815260040161081d906130f5565b6101ca546101c95461089e916001600160a01b03918216911684612219565b5050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093391906130bf565b6001600160a01b031614806109da5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf91906130bf565b6001600160a01b0316145b6109f65760405162461bcd60e51b815260040161081d90613123565b6109fe61227c565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8591906130bf565b6001600160a01b031663253bd7b783610a9e6101625490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610677919061315a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f919061315a565b80610b9f57505060335460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd610bcf8133611768565b610c4b5760405162461bcd60e51b815260206004820152604160248201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60448201527f6f7420686176652074686520617070726f70726961746520617574686f7269746064820152607960f81b608482015260a40161081d565b610c5761012d856122ce565b15610ca45760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e00000000604482015260640161081d565b610cb86001600160a01b0385168484612219565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d53885604051610d0791815260200190565b60405180910390a450505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da691906130bf565b6001600160a01b03161480610e4d5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4291906130bf565b6001600160a01b0316145b610e695760405162461bcd60e51b815260040161081d90613123565b61089e826122f0565b610e7a61235d565b3360008181526101cc602090815260409182902082518084019093525460ff80821684526101009091041682820152606490610eb890850185613186565b60ff161115610f095760405162461bcd60e51b815260206004820152601960248201527f536f6d614561726e3a20494e56414c49442050455243454e5400000000000000604482015260640161081d565b6101ca5442600160a01b90910465ffffffffffff161115610f3c5760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff164210610f935760405162461bcd60e51b815260206004820152601360248201527214dbdb5851585c9b8e8810d3d3541311551151606a1b604482015260640161081d565b6001600160a01b03821660009081526101cc602052604090208390610fb882826131d2565b505060405133907fa422a24d6fdaf3da53364ae199448f1d326b0001530b7888afd0f50a805d09a490610fee9084908790613216565b60405180910390a2505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c91906130bf565b6001600160a01b031614806111335750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112891906130bf565b6001600160a01b0316145b61114f5760405162461bcd60e51b815260040161081d90613123565b6109fe6123a7565b600054610100900460ff16158080156111775750600054600160ff909116105b806111915750303b158015611191575060005460ff166001145b6111f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161081d565b6000805460ff191660011790558015611217576000805461ff0019166101001790555b6040516bffffffffffffffffffffffff193060601b16602082015260008051602061347c833981519152603482015260540160408051601f1981840301815291905280516020909101206101c75561126d6123e4565b61127561241c565b60408051600081526020810190915261128d9061244b565b6101c88690556101c980546001600160a01b0319166001600160a01b0387161790556112b8856124bd565b6112c1846122f0565b6112cb83836124c9565b8015611311576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b61132161235d565b600261019554036113445760405162461bcd60e51b815260040161081d9061327c565b60026101955560008281526101cb60205260409020338261139f5760405162461bcd60e51b815260206004820152601560248201527414dbdb5851585c9b8e8816915493c8105353d55395605a1b604482015260640161081d565b815460ff166113c05760405162461bcd60e51b815260040161081d906132b3565b6101ca5442600160a01b90910465ffffffffffff1611156113f35760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff1642106114545760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a2044454c45474154494f4e5320434f4d504c4554454400604482015260640161081d565b6101c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c291906130dc565b6101c9549091506114de906001600160a01b03168330876125b2565b6101c9546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155091906130dc565b61155a9190613300565b9050600061156787612096565b6040516340c10f1960e01b81526001600160a01b03868116600483015260248201859052919250908216906340c10f1990604401600060405180830381600087803b1580156115b557600080fd5b505af11580156115c9573d6000803e3d6000fd5b505050506001600160a01b0384166000908152600386016020526040812080548892906115f7908490613313565b925050819055508460020154816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166591906130dc565b11156116b35760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a204d41585f44454c45474154494f4e5f45584345454400604482015260640161081d565b60018501546001600160a01b038516600090815260038701602052604090205411156117215760405162461bcd60e51b815260206004820152601d60248201527f536f6d614561726e3a204d41585f555345525f44454c45474154494f4e000000604482015260640161081d565b604051828152339088907f93d4580cc943a8bbdef8385c59786f03752abe9c98d7035471a57b6018c934e9906020015b60405180910390a350506001610195555050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906130bf565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f919061315a565b9392505050565b61186e61235d565b600261019554036118915760405162461bcd60e51b815260040161081d9061327c565b60026101955560008381526101cb60205260408082208483529120338486036118f35760405162461bcd60e51b8152602060048201526014602482015273536f6d614561726e3a2053414d4520504f4f4c5360601b604482015260640161081d565b6101ca5442600160a01b90910465ffffffffffff1611156119265760405162461bcd60e51b815260040161081d906131a3565b6101ca54600160d01b900465ffffffffffff1642106119875760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a2044454c45474154494f4e5320434f4d504c4554454400604482015260640161081d565b600084116119cf5760405162461bcd60e51b815260206004820152601560248201527414dbdb5851585c9b8e8816915493c8105353d55395605a1b604482015260640161081d565b825460ff166119f05760405162461bcd60e51b815260040161081d906132b3565b815460ff16611a115760405162461bcd60e51b815260040161081d906132b3565b6000611a1c87612096565b604051632770a7eb60e21b81526001600160a01b0384811660048301526024820188905291925090821690639dc29fac90604401600060405180830381600087803b158015611a6a57600080fd5b505af1158015611a7e573d6000803e3d6000fd5b50505050506000611a8e86612096565b6040516340c10f1960e01b81526001600160a01b03848116600483015260248201889052919250908216906340c10f1990604401600060405180830381600087803b158015611adc57600080fd5b505af1158015611af0573d6000803e3d6000fd5b5050506001600160a01b038316600090815260038601602052604081208054889450909250611b20908490613300565b90915550506001600160a01b038116600090815260038301602052604081208054869290611b4f908490613313565b9091555060009050611b6086612096565b90508260020154816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc991906130dc565b1115611c175760405162461bcd60e51b815260206004820152601f60248201527f536f6d614561726e3a204d41585f44454c45474154494f4e5f45584345454400604482015260640161081d565b60018301546001600160a01b03831660009081526003850160205260409020541115611c855760405162461bcd60e51b815260206004820152601d60248201527f536f6d614561726e3a204d41585f555345525f44454c45474154494f4e000000604482015260640161081d565b336001600160a01b031686887fb2f65a0d3a3bd76a45462d4c8f89fdfa1feb6480eade68dd855f6d1594e02f5488604051611cc291815260200190565b60405180910390a450506001610195555050505050565b60608167ffffffffffffffff811115611cf457611cf4613266565b604051908082528060200260200182016040528015611d2757816020015b6060815260200190600190039081611d125790505b50905060005b82811015611dc757611d9730858584818110611d4b57611d4b613326565b9050602002810190611d5d919061333c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125f092505050565b828281518110611da957611da9613326565b60200260200101819052508080611dbf9061338a565b915050611d2d565b5092915050565b6000611dd983612096565b6040516370a0823160e01b81526001600160a01b03848116600483015291909116906370a0823190602401602060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f91906130dc565b60008181526101cb602052604081205460ff16611e745760405162461bcd60e51b815260040161081d906133a3565b5060009081526101cb602052604090206002015490565b33611ea460008051602061347c83398151915282611768565b80611eb75750611eb76101c75482611768565b611ed35760405162461bcd60e51b815260040161081d906130f5565b60026101955403611ef65760405162461bcd60e51b815260040161081d9061327c565b60026101955583851115611f585760405162461bcd60e51b815260206004820152602360248201527f536f6d614561726e3a20494e56414c49445f44454c45474154494f4e5f4c494d60448201526249545360e81b606482015260840161081d565b60008681526101cb602052604090206002810185905560018101869055805460ff1916831515908117825560ff161561200657611f94876126e4565b6001600160a01b0316632772ce9d856040518263ffffffff1660e01b8152600401611fc191815260200190565b6020604051808303816000875af1158015611fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612004919061315a565b505b60408051878152602081018790529081018590528315156060820152339088907f06ebee08997f5dd32a199a57b1e79fa371861860854b5df78318ac7ea07abee090608001611751565b60008181526101cb602052604081205460ff1661207f5760405162461bcd60e51b815260040161081d906133a3565b5060009081526101cb602052604090206001015490565b60008181526101cb602052604081205460ff166120c55760405162461bcd60e51b815260040161081d906133a3565b610677739c80fd7d6d0e064ad72f42ec60a8386b944c49e9836127b5565b60008181526101cb602052604081205460ff166121125760405162461bcd60e51b815260040161081d906133a3565b61211b82612096565b6001600160a01b0316631e26571f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074b573d6000803e3d6000fd5b3361217160008051602061347c83398151915282611768565b8061218457506121846101c75482611768565b6121a05760405162461bcd60e51b815260040161081d906130f5565b6121aa83836124c9565b505050565b60006001600160e01b03198216630e46e23b60e31b148061067757506106778261281b565b61016254604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261016255565b6040516001600160a01b0383166024820152604481018290526121aa90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612840565b612284612912565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381166000908152600183016020526040812054151561185f565b6101ca54604080516001600160a01b0392831681529183166020830152805133927fe9749b9cfc1a71f1d982618f21a5b03b6a9dd68c6d960ed823f56b6ac931ea5192908290030190a26101ca80546001600160a01b0319166001600160a01b0392909216919091179055565b612365610b0b565b156123a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161081d565b565b6123af61235d565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122b13390565b6123ec61295d565b6123f461295d565b6123fc612984565b61240461295d565b61240c61295d565b61241461295d565b6123a5612a16565b600054610100900460ff166124435760405162461bcd60e51b815260040161081d906133da565b600161019555565b600054610100900460ff166124725760405162461bcd60e51b815260040161081d906133da565b60005b815181101561089e576124ac82828151811061249357612493613326565b602002602001015161012d612a4990919063ffffffff16565b506124b68161338a565b9050612475565b61089e61012d82612a49565b6101ca5460408051600160a01b830465ffffffffffff9081168252600160d01b909304831660208201528483168183015291831660608301525133917f6ca09cec37cd86fcfa33cf8defae0d93e9f8e62318b99a6e875a4644e897ddc0919081900360800190a26101ca5465ffffffffffff838116600160a01b9092041614612570576101ca805465ffffffffffff60a01b1916600160a01b65ffffffffffff8516021790555b6101ca5465ffffffffffff828116600160d01b909204161461089e576101ca805465ffffffffffff8316600160d01b026001600160d01b039091161790555050565b6040516001600160a01b03808516602483015283166044820152606481018290526125ea9085906323b872dd60e01b90608401612245565b50505050565b60606001600160a01b0383163b6126585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161081d565b600080846001600160a01b0316846040516126739190613425565b600060405180830381855af49150503d80600081146126ae576040519150601f19603f3d011682016040523d82523d6000602084013e6126b3565b606091505b50915091506126db828260405180606001604052806027815260200161345560279139612a5e565b95945050505050565b60006126ef82612096565b90506001600160a01b0381163b6127b05761271e739c80fd7d6d0e064ad72f42ec60a8386b944c49e983612a97565b50604051639498bd7160e01b8152600481018390526001600160a01b03821690639498bd7190602401600060405180830381600087803b15801561276157600080fd5b505af1158015612775573d6000803e3d6000fd5b50506040516001600160a01b03841692508491507fa3c2da69295bcaba324b997624b6c59792aab58e331a8e878f9673aff68bd24a90600090a35b919050565b600061185f838330604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b60006001600160e01b03198216638757f10760e01b1480610677575061067782612b37565b6000612895826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5c9092919063ffffffff16565b8051909150156121aa57808060200190518101906128b3919061315a565b6121aa5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161081d565b61291a610b0b565b6123a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161081d565b600054610100900460ff166123a55760405162461bcd60e51b815260040161081d906133da565b600054610100900460ff166129ab5760405162461bcd60e51b815260040161081d906133da565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f198184030181529190528051602090910120610161556123a56000196121d4565b600054610100900460ff16612a3d5760405162461bcd60e51b815260040161081d906133da565b6033805460ff19169055565b600061185f836001600160a01b038416612b73565b60608315612a6d57508161185f565b825115612a7d5782518084602001fd5b8160405162461bcd60e51b815260040161081d9190613441565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166106775760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161081d565b60006001600160e01b0319821663b55bd4f760e01b1480610677575061067782612bc2565b6060612b6b8484600085612bf7565b949350505050565b6000818152600183016020526040812054612bba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610677565b506000610677565b60006001600160e01b0319821663d86f1ca160e01b148061067757506301ffc9a760e01b6001600160e01b0319831614610677565b606082471015612c585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161081d565b6001600160a01b0385163b612caf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161081d565b600080866001600160a01b03168587604051612ccb9190613425565b60006040518083038185875af1925050503d8060008114612d08576040519150601f19603f3d011682016040523d82523d6000602084013e612d0d565b606091505b5091509150612d1d828286612a5e565b979650505050505050565b600060208284031215612d3a57600080fd5b81356001600160e01b03198116811461185f57600080fd5b6001600160a01b03811681146109fe57600080fd5b60008060408385031215612d7a57600080fd5b823591506020830135612d8c81612d52565b809150509250929050565b600060208284031215612da957600080fd5b5035919050565b600060208284031215612dc257600080fd5b813561185f81612d52565b600080600060608486031215612de257600080fd5b8335612ded81612d52565b92506020840135612dfd81612d52565b929592945050506040919091013590565b600060408284031215612e2057600080fd5b50919050565b803565ffffffffffff811681146127b057600080fd5b600080600080600060a08688031215612e5457600080fd5b853594506020860135612e6681612d52565b93506040860135612e7681612d52565b9250612e8460608701612e26565b9150612e9260808701612e26565b90509295509295909350565b60008060408385031215612eb157600080fd5b50508035926020909101359150565b600080600060608486031215612ed557600080fd5b505081359360208301359350604090920135919050565b60008060208385031215612eff57600080fd5b823567ffffffffffffffff80821115612f1757600080fd5b818501915085601f830112612f2b57600080fd5b813581811115612f3a57600080fd5b8660208260051b8501011115612f4f57600080fd5b60209290920196919550909350505050565b60005b83811015612f7c578181015183820152602001612f64565b50506000910152565b60008151808452612f9d816020860160208601612f61565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561300657603f19888603018452612ff4858351612f85565b94509285019290850190600101612fd8565b5092979650505050505050565b80151581146109fe57600080fd5b600080600080600060a0868803121561303957600080fd5b85359450602086013593506040860135925060608601359150608086013561306081613013565b809150509295509295909350565b604081016106778284805160ff908116835260209182015116910152565b6000806040838503121561309f57600080fd5b6130a883612e26565b91506130b660208401612e26565b90509250929050565b6000602082840312156130d157600080fd5b815161185f81612d52565b6000602082840312156130ee57600080fd5b5051919050565b602080825260149082015273536f6d614561726e3a2041444d494e204f4e4c5960601b604082015260600190565b6020808252601f908201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c7900604082015260600190565b60006020828403121561316c57600080fd5b815161185f81613013565b60ff811681146109fe57600080fd5b60006020828403121561319857600080fd5b813561185f81613177565b60208082526015908201527414dbdb5851585c9b8e881393d50814d51054951151605a1b604082015260600190565b81356131dd81613177565b60ff8116905081548160ff19821617835560208401356131fc81613177565b61ff008160081b168361ffff198416171784555050505050565b608081016132348285805160ff908116835260209182015116910152565b823561323f81613177565b60ff166040830152602083013561325581613177565b60ff81166060840152509392505050565b634e487b7160e01b600052604160045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f536f6d614561726e3a20504f4f4c2044495341424c4544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610677576106776132ea565b80820180821115610677576106776132ea565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261335357600080fd5b83018035915067ffffffffffffffff82111561336e57600080fd5b60200191503681900382131561338357600080fd5b9250929050565b60006001820161339c5761339c6132ea565b5060010190565b60208082526019908201527f536f6d614561726e3a20494e56414c49445f504f4f4c5f494400000000000000604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251613437818460208701612f61565b9190910192915050565b60208152600061185f6020830184612f8556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ea8754712c89827bf0d2f18b12be70402e54ec47807f26f8d90e6ac21f7b298ca164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
