{
  "_format": "hh-sol-artifact-1",
  "contractName": "Stargate",
  "sourceName": "contracts/mocks/Stargate/Stargate.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "AddressInsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CheckpointUnorderedInsertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DelegationExitAlreadyRequested",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "DelegationNotFound",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EnforcedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExpectedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "contractBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "InsufficientContractBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "enum IStargate.DelegationStatus",
          "name": "status",
          "type": "uint8"
        }
      ],
      "name": "InvalidDelegationStatus",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitializationParams",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidMaxClaimablePeriods",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "InvalidToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxClaimablePeriodsExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyStargateNFTAndProtocolStaker",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "TokenAlreadyDelegated",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "TokenUnderMaturityPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "UnauthorizedUser",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        }
      ],
      "name": "ValidatorNotActiveOrQueued",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "required",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "provided",
          "type": "uint256"
        }
      ],
      "name": "VetAmountMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VetTransferFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "delegationId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "exitBlock",
          "type": "uint48"
        }
      ],
      "name": "DelegationExitRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "delegationId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "probabilityMultiplier",
          "type": "uint8"
        }
      ],
      "name": "DelegationInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "delegationId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "firstClaimedPeriod",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "lastClaimedPeriod",
          "type": "uint32"
        }
      ],
      "name": "DelegationRewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "delegationId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "levelId",
          "type": "uint8"
        }
      ],
      "name": "DelegationWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "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": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROB_MULTIPLIER_NODE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROB_MULTIPLIER_X_NODE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VTHO_TOKEN",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "claimRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "claimableDelegationPeriods",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "claimableRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_batch",
          "type": "uint32"
        }
      ],
      "name": "claimableRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getDelegationDetails",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "delegationId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "validator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "stake",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "probabilityMultiplier",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "startPeriod",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "endPeriod",
              "type": "uint32"
            },
            {
              "internalType": "bool",
              "name": "isLocked",
              "type": "bool"
            },
            {
              "internalType": "enum IStargate.DelegationStatus",
              "name": "status",
              "type": "uint8"
            }
          ],
          "internalType": "struct IStargate.Delegation",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getDelegationIdOfToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getDelegationStatus",
      "outputs": [
        {
          "internalType": "enum IStargate.DelegationStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_period",
          "type": "uint32"
        }
      ],
      "name": "getDelegatorsEffectiveStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getEffectiveStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxClaimablePeriods",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "hasRequestedExit",
      "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": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "admin",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "protocolStakerContract",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stargateNFTContract",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxClaimablePeriods",
              "type": "uint32"
            }
          ],
          "internalType": "struct Stargate.InitializeV1Params",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "lockedRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        }
      ],
      "name": "migrateAndDelegate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "requestDelegationExit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_maxClaimablePeriods",
          "type": "uint32"
        }
      ],
      "name": "setMaxClaimablePeriods",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_levelId",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_validator",
          "type": "address"
        }
      ],
      "name": "stakeAndDelegate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stargateNFT",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614a646200010460003960008181612de701528181612e100152612f580152614a646000f3fe6080604052600436106101e55760003560e01c806301ffc9a71461024357806307a9bbbb1461027857806308bbb824146102a65780630962ef79146102c65780630f20d6f8146102e657806315fa1bdf1461030657806317f7f2ea14610319578063248a9ca3146103395780632e17de78146103595780632f2ff15d1461037957806336568abe146103995780633f4ba83a146103b9578063454b0608146103ce5780634bf5d7e9146103e15780634f1ef28614610403578063505279b41461041657806352d1902d1461043d57806354fd4d5014610452578063584a983f146104665780635c975abb146104795780635d21e15b1461048e578063604f2177146104a357806366980b27146104b657806369e79b7d146104d857806371569e2f146104f85780638456cb591461051857806391d148541461052d57806391ddadf41461054d5780639835fc7e1461056f5780639af02d9d1461058f578063a217fddf146105af578063ad3cb1cc146105c4578063b0d76cad146105f5578063c728b7401461061f578063d547741f1461063f578063e27351341461065f578063eabfa0441461067f578063f040812e146106ac578063f18ac150146106e9578063f2d804ef146106fe578063f4655cd11461071e578063f72c0d8b1461074b57600080fd5b3661023e5760006101f461076d565b60018101549091506001600160a01b0316331480159061021e575080546001600160a01b03163314155b1561023c576040516380c6edb160e01b815260040160405180910390fd5b005b600080fd5b34801561024f57600080fd5b5061026361025e366004613f67565b610791565b60405190151581526020015b60405180910390f35b34801561028457600080fd5b50610298610293366004613f91565b6107c8565b60405190815260200161026f565b3480156102b257600080fd5b5061023c6102c1366004613fbf565b6107e8565b3480156102d257600080fd5b5061023c6102e1366004613f91565b6108d5565b3480156102f257600080fd5b50610298610301366004613f91565b610907565b610298610314366004613ffe565b61091a565b34801561032557600080fd5b5061023c6103343660046140ac565b610ad5565b34801561034557600080fd5b50610298610354366004613f91565b610cb8565b34801561036557600080fd5b5061023c610374366004613f91565b610cd8565b34801561038557600080fd5b5061023c610394366004613fbf565b61113d565b3480156103a557600080fd5b5061023c6103b4366004613fbf565b611159565b3480156103c557600080fd5b5061023c611191565b61023c6103dc366004613f91565b6111a4565b3480156103ed57600080fd5b506103f66113c1565b60405161026f9190614154565b61023c6104113660046141ae565b611439565b34801561042257600080fd5b5061043065456e6572677981565b60405161026f9190614240565b34801561044957600080fd5b50610298611458565b34801561045e57600080fd5b506001610298565b61023c610474366004613fbf565b611475565b34801561048557600080fd5b5061026361169d565b34801561049a57600080fd5b506104306116b2565b6102986104b1366004614254565b6116d0565b3480156104c257600080fd5b506104cb606481565b60405161026f9190614271565b3480156104e457600080fd5b5061023c6104f3366004613f91565b611820565b34801561050457600080fd5b50610263610513366004613f91565b611c7e565b34801561052457600080fd5b5061023c611cc9565b34801561053957600080fd5b50610263610548366004613fbf565b611cdc565b34801561055957600080fd5b50610562611d12565b60405161026f919061427f565b34801561057b57600080fd5b5061029861058a366004613f91565b611d81565b34801561059b57600080fd5b5061023c6105aa366004614292565b611d96565b3480156105bb57600080fd5b50610298600081565b3480156105d057600080fd5b506103f6604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561060157600080fd5b5061060a611df0565b60405163ffffffff909116815260200161026f565b34801561062b57600080fd5b5061029861063a366004613f91565b611e09565b34801561064b57600080fd5b5061023c61065a366004613fbf565b611e75565b34801561066b57600080fd5b5061029861067a3660046142af565b611e91565b34801561068b57600080fd5b5061069f61069a366004613f91565b611ea5565b60405161026f919061430c565b3480156106b857600080fd5b506106cc6106c7366004613f91565b611ebe565b6040805163ffffffff93841681529290911660208301520161026f565b3480156106f557600080fd5b506104cb609681565b34801561070a57600080fd5b50610298610719366004614388565b611edb565b34801561072a57600080fd5b5061073e610739366004613f91565b611f1e565b60405161026f91906143b6565b34801561075757600080fd5b506102986000805160206149cf83398151915281565b7faf70fbb7e0f95b3e16b002fff11ff1ea2145b66dd31261eff20d74fda974970090565b60006001600160e01b03198216637965db0b60e01b14806107c257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806107d361076d565b60009384526002016020525050604090205490565b6107f0611f31565b8160006107fb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087091906143c4565b90506001600160a01b03811633146108a6573360405163ea93ab6d60e01b815260040161089d9190614240565b60405180910390fd5b6108ae611f59565b60006108b861076d565b90506108c5818787611f8f565b506108ce6126cc565b5050505050565b6108dd611f31565b6108e5611f59565b60006108ef61076d565b90506108fb81836126dd565b506109046126cc565b50565b60006107c261091461076d565b8361286d565b6000610924611f31565b61092c611f59565b600061093661076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d7799919061096e908890600401614271565b600060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b39190810190614455565b90508060a0015134146109e25760a0810151604051636b78e9ed60e01b815261089d9187913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c90610a169088903390600401614532565b6020604051808303816000875af1158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a59919061454e565b600183015460405163996fa25560e01b81529194506001600160a01b03169063996fa25590610a8e9033908790600401614567565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b50505050610acb828486611f8f565b50506107c26126cc565b6000610adf61298c565b805490915060ff600160401b82041615906001600160401b0316600081158015610b065750825b90506000826001600160401b03166001148015610b225750303b155b905081158015610b30575080155b15610b4e5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610b7757845460ff60401b1916600160401b1785555b60208601516001600160a01b03161580610b99575085516001600160a01b0316155b80610baf575060408601516001600160a01b0316155b80610bc25750606086015163ffffffff16155b15610be057604051637676b39760e01b815260040160405180910390fd5b610be86129b0565b610bf06129b0565b610bf86129b8565b8551610c06906000906129c8565b506000610c1161076d565b602088015181546001600160a01b039182166001600160a01b031991821617835560408a015160018401805491909316911617905560608801516005909101805463ffffffff90921663ffffffff19909216919091179055508315610cb057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610cc3612a70565b60009384526020525050604090206001015490565b610ce0611f31565b806000610ceb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906143c4565b90506001600160a01b0381163314610d8d573360405163ea93ab6d60e01b815260040161089d9190614240565b610d95611f59565b6000610d9f61076d565b90506000610dad8287612a94565b6001830154604051631c96a19760e31b8152600481018990529192506000916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190614596565b905060028260e001516003811115610e3c57610e3c6142d4565b03610e5f5786600260405163d5a996d160e01b815260040161089d929190614617565b60008260e001516003811115610e7757610e776142d4565b14610f255782548251604051636f87183d60e11b81526001600160a01b039092169163df0e307a91610eaf9160040190815260200190565b600060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b50505050816000015182602001516001600160a01b0316886000805160206149af83398151915285604001518560200151604051610f1c92919061462b565b60405180910390a45b60018260e001516003811115610f3d57610f3d6142d4565b03610fe857816000015182602001516001600160a01b031688600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061463c565b604051610fdf919061427f565b60405180910390a45b610ff28388612c70565b156110105760405163462cd83f60e01b815260040160405180910390fd5b61101a83886126dd565b6110248388612cd8565b6001830154604051630852cd8d60e31b8152600481018990526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b5050505080606001514710156110b857606081015160405163b7ddd88b60e01b8152476004820152602481019190915260440161089d565b606081015160405160009133918381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061112b5760608201516040516376ac9b2760e11b815261089d913391600401614567565b505050506111376126cc565b50505050565b61114682610cb8565b61114f81612d03565b61113783836129c8565b6001600160a01b03811633146111825760405163334bd91960e11b815260040160405180910390fd5b61118c8282612d0d565b505050565b600061119c81612d03565b610904612d85565b6111ac611f31565b6111b4611f59565b60006111be61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b91906143c4565b6001600160a01b031663a574cea4846040518263ffffffff1660e01b815260040161126891815260200190565b60e060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506112e591508590600401614271565b600060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132a9190810190614455565b60a00151905080341461135657818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018690526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561139e57600080fd5b505af11580156113b2573d6000803e3d6000fd5b505050505050506109046126cc565b606073__$7df4da9b1a17d9d425275d1becdd020933$__634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865af415801561140c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261143491908101906146e2565b905090565b611441612ddc565b61144a82612e81565b6114548282612e99565b5050565b6000611462612f4d565b506000805160206149ef83398151915290565b61147d611f31565b611485611f59565b600061148f61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c91906143c4565b6001600160a01b031663a574cea4856040518263ffffffff1660e01b815260040161153991815260200190565b60e060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506115b691508590600401614271565b600060405180830381865afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fb9190810190614455565b60a00151905080341461162757818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018790526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561166f57600080fd5b505af1158015611683573d6000803e3d6000fd5b50505050611692838686611f8f565b5050506114546126cc565b6000806116a8612f96565b5460ff1692915050565b6000806116bd61076d565b600101546001600160a01b031692915050565b60006116da611f31565b6116e2611f59565b60006116ec61076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d77999190611724908790600401614271565b600060405180830381865afa158015611741573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117699190810190614455565b90508060a0015134146117985760a0810151604051636b78e9ed60e01b815261089d9186913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c906117cc9087903390600401614532565b6020604051808303816000875af11580156117eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180f919061454e565b9250505061181b6126cc565b919050565b611828611f31565b80600061183361076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a891906143c4565b90506001600160a01b03811633146118d5573360405163ea93ab6d60e01b815260040161089d9190614240565b6118dd611f59565b60006118e761076d565b600086815260028201602052604081205491925081900361191e57604051630b14099f60e31b81526004810187905260240161089d565b600061192a8388612a94565b905060018160e001516003811115611944576119446142d4565b03611a5e578254604051636f87183d60e11b8152600481018490526001600160a01b039091169063df0e307a90602401600060405180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b50505050602081015160408083015160018601549151633404591760e21b8152600481018b905285936001600160a01b03908116938c936000805160206149af8339815191529390929091169063d011645c90602401602060405180830381865afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a399190614716565b604051611a4792919061462b565b60405180910390a4611a598388612cd8565b611b28565b60028160e001516003811115611a7657611a766142d4565b03611b085760a081015163ffffffff90811614611aa6576040516337bd14f160e11b815260040160405180910390fd5b825460405163ce88abbd60e01b8152600481018490526001600160a01b039091169063ce88abbd90602401600060405180830381600087803b158015611aeb57600080fd5b505af1158015611aff573d6000803e3d6000fd5b50505050611b28565b60e081015160405163d5a996d160e01b815261089d918991600401614617565b82546020820151604051630d4f10ad60e11b81526000926001600160a01b031691631a9e215a91611b5c9190600401614240565b608060405180830381865afa158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d9190614733565b87546040516307a5b63360e11b815260048101899052919550600094506001600160a01b03169250630f4b6c6691506024016040805180830381865afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190614792565b915050611c308584602001518b856002611c2991906147d7565b6000612fba565b8383602001516001600160a01b03168a600080516020614a0f83398151915284604051611c69919063ffffffff91909116815260200190565b60405180910390a450505050506111376126cc565b600080611c8961076d565b600084815260028201602052604090205490915015801590611cc2575063ffffffff611cb58285612a94565b60a0015163ffffffff1614155b9392505050565b6000611cd481612d03565b610904613055565b600080611ce7612a70565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600073__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611434919061463c565b60006107c2611d8e61076d565b83600061309c565b6000611da181612d03565b8163ffffffff16600003611dc85760405163874e74df60e01b815260040160405180910390fd5b81611dd161076d565b600501805463ffffffff191663ffffffff929092169190911790555050565b6000611dfa61076d565b6005015463ffffffff16919050565b600080611e1461076d565b90506000611e228285613181565b90506002816003811115611e3857611e386142d4565b14611e47575060009392505050565b6000611e5383866134bf565b9150611e6c90508386611e678460016147d7565b613739565b95945050505050565b611e7e82610cb8565b611e8781612d03565b6111378383612d0d565b6000611cc2611e9e61076d565b848461309c565b611ead613f25565b6107c2611eb861076d565b83612a94565b600080611ed2611ecc61076d565b846134bf565b91509150915091565b600080611ee661076d565b6001600160a01b03851660009081526004820160205260409020909150611f0d90846138b5565b6001600160e01b0316949350505050565b60006107c2611f2b61076d565b83613181565b611f3961169d565b15611f575760405163d93c066560e01b815260040160405180910390fd5b565b6000611f63613902565b805490915060011901611f8957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000611f9b8484613181565b90506002816003811115611fb157611fb16142d4565b03611fd2576040516331bbcc6f60e01b81526004810184905260240161089d565b83546040516327cd4de160e01b81526000916001600160a01b0316906327cd4de190612002908690600401614240565b60c060405180830381865afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204391906147f4565b508954604051630d4f10ad60e11b8152919650600095506001600160a01b03169350631a9e215a925061207b91508790600401614240565b608060405180830381865afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614733565b509250505060ff82166002148015906120d9575060ff8216600114155b806120ea575063ffffffff81811614155b1561210a57836040516315a36a6960e11b815260040161089d9190614240565b6001860154604051636b10a8bf60e11b8152600481018790526001600160a01b039091169063d621517e90602401602060405180830381865afa158015612155573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612179919061485e565b1561219a5760405163258643a160e11b81526004810186905260240161089d565b6001860154604051631c96a19760e31b8152600481018790526000916001600160a01b03169063e4b50cb89060240160a060405180830381865afa1580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190614596565b9050806020015160ff166000036122375760405163124bad6360e31b81526004810187905260240161089d565b6000868152600288016020526040902054600385600381111561225c5761225c6142d4565b148061227957506001856003811115612277576122776142d4565b145b15612440578754604051630dd3570160e01b8152600481018390526000916001600160a01b031690630dd3570190602401608060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb9190614879565b50508a54604051636f87183d60e11b8152600481018690529293506001600160a01b03169163df0e307a9150602401600060405180830381600087803b15801561233457600080fd5b505af1158015612348573d6000803e3d6000fd5b5050505081816001600160a01b0316896000805160206149af8339815191528660600151876020015160405161237f92919061462b565b60405180910390a4600186600381111561239b5761239b6142d4565b0361243e5781816001600160a01b031689600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015612404573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612428919061463c565b604051612435919061427f565b60405180910390a45b505b8015612478576124508888612c70565b1561246e5760405163462cd83f60e01b815260040160405180910390fd5b61247888886126dd565b600188015460405163f057248560e01b8152600481018990526000916001600160a01b03169063f057248590602401602060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e8919061485e565b6124f35760646124f6565b60965b895460608501516040516312fe610b60e21b81526001600160a01b038b8116600483015260ff8516602483015293945060009390921691634bf9842c919060440160206040518083038185885af1158015612555573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061257a919061454e565b8a54604051630d4f10ad60e11b81529192506000916001600160a01b0390911690631a9e215a906125af908c90600401614240565b608060405180830381865afa1580156125cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f09190614733565b9350505050818b60020160008c81526020019081526020016000208190555080600161261c91906147d7565b60008b815260038d0160205260409020805463ffffffff191663ffffffff9290921691909117905561265c8b8a8c6126558560026147d7565b6001612fba565b81896001600160a01b03168b7fa0286778706a77850b9dd59b02210d97bb93f749fdde710fa08088f5a6bb962688606001518960200151886040516126b79392919092835260ff918216602084015216604082015260600190565b60405180910390a45050505050505050505050565b60006126d6613902565b6001905550565b6000806126ea84846134bf565b915091506126f88484612c70565b156127225760058401546001906127159063ffffffff16846147d7565b61271f91906148cb565b90505b60006127308585600061309c565b905080600003612741575050505050565b60018501546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e90602401602060405180830381865afa15801561278d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b191906143c4565b60008681526003880160205260409020805463ffffffff191663ffffffff868116919091179091559091506127f29065456e65726779908390859061392616565b8560020160008681526020019081526020016000205485826001600160a01b03167ff4cde2b5a31835b3dac5ba586238b7160063a46803ccbf2322db0933efe694ed85888860405161285d9392919092835263ffffffff918216602084015216604082015260600190565b60405180910390a4505050505050565b6001820154604051631c96a19760e31b81526004810183905260009182916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa1580156128bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e19190614596565b60018501546020820151604051636d77999160e01b81529293506000926001600160a01b0390921691636d7799919161291c91600401614271565b600060405180830381865afa158015612939573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129619190810190614455565b9050606481608001516001600160401b0316836060015161298291906148e8565b611e6c91906148ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611f5761397e565b6129c061397e565b611f576139a3565b6000806129d3612a70565b90506129df8484611cdc565b612a5f576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055612a153390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107c2565b60009150506107c2565b5092915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b612a9c613f25565b600082815260028401602052604081205490819003612afd5750506040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526107c2565b8354604051630dd3570160e01b8152600481018390526000918291829182916001600160a01b0390911690630dd3570190602401608060405180830381865afa158015612b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b729190614879565b8b546040516307a5b63360e11b8152600481018b9052949850929650909450925060009182916001600160a01b031690630f4b6c66906024016040805180830381865afa158015612bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612beb9190614792565b915091506000612bfb8b8b613181565b9050604051806101000160405280898152602001886001600160a01b031681526020018781526020018660ff1681526020018463ffffffff1681526020018363ffffffff1681526020018515158152602001826003811115612c5f57612c5f6142d4565b90529b9a5050505050505050505050565b6000806000612c7f85856134bf565b915091508063ffffffff168263ffffffff161115612ca2576000925050506107c2565b600585015463ffffffff16612cb783836148cb565b63ffffffff1610612ccd576001925050506107c2565b506000949350505050565b600090815260028201602090815260408083208390556003909301905220805463ffffffff19169055565b61090481336139c0565b600080612d18612a70565b9050612d248484611cdc565b15612a5f576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107c2565b612d8d6139eb565b6000612d97612f96565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612dd19190614240565b60405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612e6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612e576000805160206149ef833981519152546001600160a01b031690565b6001600160a01b031614155b15611f575760405163703e46dd60e11b815260040160405180910390fd5b6000805160206149cf83398151915261145481612d03565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ef3575060408051601f3d908101601f19168201909252612ef09181019061454e565b60015b612f125781604051634c9c8ce360e01b815260040161089d9190614240565b6000805160206149ef8339815191528114612f4357604051632a87526960e21b81526004810182905260240161089d565b61118c8383613a10565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f575760405163703e46dd60e11b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b6000612fc6868561286d565b6001600160a01b0386166000908152600488016020526040812091925090612fee90856138b5565b6001600160e01b0316905060008361300f5761300a8383614921565b613019565b6130198383614934565b90506130498561302883613a66565b6001600160a01b038a16600090815260048c01602052604090209190613a9e565b50505050505050505050565b61305d611f31565b6000613067612f96565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612dc43390565b60008060006130ab86866134bf565b600588015491935091506000906130c89063ffffffff1686614947565b6130d290846147d7565b60058801549091506000906001906130f09063ffffffff16846147d7565b6130fa91906148cb565b90508263ffffffff168163ffffffff1611156131135750815b8263ffffffff168263ffffffff161115613134576000945050505050611cc2565b6000825b8263ffffffff168163ffffffff1611613174576131568a8a83613739565b6131609083614934565b91508061316c8161496f565b915050613138565b5098975050505050505050565b60008181526002830160205260408120548082036131a35760009150506107c2565b8354604051630dd3570160e01b81526004810183905260009182916001600160a01b0390911690630dd3570190602401608060405180830381865afa1580156131f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132149190614879565b509193509150506001600160a01b03821661323557600093505050506107c2565b85546040516327cd4de160e01b81526000916001600160a01b0316906327cd4de190613265908690600401614240565b60c060405180830381865afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a691906147f4565b508b546040516307a5b63360e11b8152600481018b9052919650600095508594506001600160a01b03169250630f4b6c6691506024016040805180830381865afa1580156132f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331c9190614792565b8a54604051630d4f10ad60e11b81529294509092506000916001600160a01b0390911690631a9e215a90613354908990600401614240565b608060405180830381865afa158015613371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133959190614733565b935050505060008160016133a991906147d7565b905063ffffffff838116811480159180841690871611159060009083906133db57508363ffffffff168663ffffffff16105b905060ff881615806133f0575060ff88166003145b156134095760039b5050505050505050505050506107c2565b80156134235760039b5050505050505050505050506107c2565b63ffffffff8781161480159061343e575063ffffffff868116145b8015613448575088155b156134615760039b5050505050505050505050506107c2565b60001960ff8916016134815760019b5050505050505050505050506107c2565b60ff88166002148015613492575081155b156134ab5760019b5050505050505050505050506107c2565b5060029d9c50505050505050505050505050565b600081815260028301602052604081205481908082036134e6576000809250925050613732565b8454604051630dd3570160e01b8152600481018390526000916001600160a01b031690630dd3570190602401608060405180830381865afa15801561352f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135539190614879565b50919250506001600160a01b038216905061357657600080935093505050613732565b85546040516307a5b63360e11b81526004810184905260009182916001600160a01b0390911690630f4b6c66906024016040805180830381865afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e69190614792565b8954604051630d4f10ad60e11b81529294509092506000916001600160a01b0390911690631a9e215a9061361e908790600401614240565b608060405180830381865afa15801561363b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365f9190614733565b9350505050600081600161367391906147d7565b60008a815260038c016020526040812054919250906136999063ffffffff1660016147d7565b90508463ffffffff168163ffffffff1610156136b25750835b63ffffffff848116148015906136d357508163ffffffff168463ffffffff16105b80156136ea57508063ffffffff168463ffffffff16115b156136ff579750919550613732945050505050565b8163ffffffff168163ffffffff161015613723579750909550613732945050505050565b60008098509850505050505050505b9250929050565b60008281526002840160205260408082205485549151630dd3570160e01b815260048101829052909183916001600160a01b0390911690630dd3570190602401608060405180830381865afa158015613796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ba9190614879565b5050875460405163fddff03960e01b81526001600160a01b03808516600483015263ffffffff89166024830152939450600093909116915063fddff03990604401602060405180830381865afa158015613818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383c919061454e565b9050600061384a888861286d565b6001600160a01b038416600090815260048a01602052604081209192509061387290886138b5565b6001600160e01b031690508060000361389357600095505050505050611cc2565b8061389e84846148e8565b6138a891906148ff565b9998505050505050505050565b8154600090816138c785858385613ab9565b90508015612ccd576138ec856138de600184614921565b600091825260209091200190565b54600160201b90046001600160e01b0316611e6c565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b61118c83846001600160a01b031663a9059cbb858560405160240161394c929190614567565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613b17565b613986613b71565b611f5757604051631afcd79f60e31b815260040160405180910390fd5b6139ab61397e565b60006139b5612f96565b805460ff1916905550565b6139ca8282611cdc565b61145457808260405163e2517d3f60e01b815260040161089d929190614567565b6139f361169d565b611f5757604051638dfc202b60e01b815260040160405180910390fd5b613a1982613b8b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613a5e5761118c8282613be7565b611454613c54565b60006001600160e01b03821115613a9a576040516306dfcc6560e41b815260e060048201526024810183905260440161089d565b5090565b600080613aac858585613c73565b915091505b935093915050565b60005b81831015613b0f576000613ad08484613de3565b60008781526020902090915063ffffffff86169082015463ffffffff161115613afb57809250613b09565b613b06816001614934565b93505b50613abc565b509392505050565b6000613b2c6001600160a01b03841683613dfe565b90508051600014158015613b51575080806020019051810190613b4f919061485e565b155b1561118c5782604051635274afe760e01b815260040161089d9190614240565b6000613b7b61298c565b54600160401b900460ff16919050565b806001600160a01b03163b600003613bb85780604051634c9c8ce360e01b815260040161089d9190614240565b6000805160206149ef83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613c049190614992565b600060405180830381855af49150503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5091509150611e6c858383613e0c565b3415611f575760405163b398979f60e01b815260040160405180910390fd5b825460009081908015613d8a576000613c91876138de600185614921565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509087161015613ce357604051632520601d60e01b815260040160405180910390fd5b805163ffffffff808816911603613d2b5784613d04886138de600186614921565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055613d7a565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b602001519250839150613ab19050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081613ab1565b6000613df260028484186148ff565b611cc290848416614934565b6060611cc283836000613e5f565b606082613e2157613e1c82613efc565b611cc2565b8151158015613e3857506001600160a01b0384163b155b15613e585783604051639996b31560e01b815260040161089d9190614240565b5080611cc2565b606081471015613e84573060405163cd78605960e01b815260040161089d9190614240565b600080856001600160a01b03168486604051613ea09190614992565b60006040518083038185875af1925050503d8060008114613edd576040519150601f19603f3d011682016040523d82523d6000602084013e613ee2565b606091505b5091509150613ef2868383613e0c565b9695505050505050565b805115613f0c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082015290565b600060208284031215613f7957600080fd5b81356001600160e01b031981168114611cc257600080fd5b600060208284031215613fa357600080fd5b5035919050565b6001600160a01b038116811461090457600080fd5b60008060408385031215613fd257600080fd5b823591506020830135613fe481613faa565b809150509250929050565b60ff8116811461090457600080fd5b6000806040838503121561401157600080fd5b823561401c81613fef565b91506020830135613fe481613faa565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156140645761406461402c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156140925761409261402c565b604052919050565b63ffffffff8116811461090457600080fd5b6000608082840312156140be57600080fd5b604051608081016001600160401b03811182821017156140e0576140e061402c565b60405282356140ee81613faa565b815260208301356140fe81613faa565b6020820152604083013561411181613faa565b604082015260608301356141248161409a565b60608201529392505050565b60005b8381101561414b578181015183820152602001614133565b50506000910152565b6020815260008251806020840152614173816040850160208701614130565b601f01601f19169190910160400192915050565b60006001600160401b038211156141a0576141a061402c565b50601f01601f191660200190565b600080604083850312156141c157600080fd5b82356141cc81613faa565b915060208301356001600160401b038111156141e757600080fd5b8301601f810185136141f857600080fd5b803561420b61420682614187565b61406a565b81815286602083850101111561422057600080fd5b816020840160208301376000602083830101528093505050509250929050565b6001600160a01b0391909116815260200190565b60006020828403121561426657600080fd5b8135611cc281613fef565b60ff91909116815260200190565b65ffffffffffff91909116815260200190565b6000602082840312156142a457600080fd5b8135611cc28161409a565b600080604083850312156142c257600080fd5b823591506020830135613fe48161409a565b634e487b7160e01b600052602160045260246000fd5b6004811061430857634e487b7160e01b600052602160045260246000fd5b9052565b6000610100820190508251825260018060a01b0360208401511660208301526040830151604083015260ff6060840151166060830152608083015163ffffffff80821660808501528060a08601511660a0850152505060c083015161437560c084018215159052565b5060e0830151612a6960e08401826142ea565b6000806040838503121561439b57600080fd5b82356143a681613faa565b91506020830135613fe48161409a565b602081016107c282846142ea565b6000602082840312156143d657600080fd5b8151611cc281613faa565b600082601f8301126143f257600080fd5b815161440061420682614187565b81815284602083860101111561441557600080fd5b614426826020830160208701614130565b949350505050565b8051801515811461181b57600080fd5b80516001600160401b038116811461181b57600080fd5b60006020828403121561446757600080fd5b81516001600160401b038082111561447e57600080fd5b9083019060c0828603121561449257600080fd5b61449a614042565b8251828111156144a957600080fd5b6144b5878286016143e1565b8252506144c46020840161442e565b6020820152604083015191506144d982613fef565b8160408201526144eb6060840161443e565b60608201526144fc6080840161443e565b608082015260a083015160a082015280935050505092915050565b60ff9390931683526020830191909152604082015260600190565b60ff9290921682526001600160a01b0316602082015260400190565b60006020828403121561456057600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b805165ffffffffffff8116811461181b57600080fd5b600060a082840312156145a857600080fd5b60405160a081016001600160401b03811182821017156145ca576145ca61402c565b6040528251815260208301516145df81613fef565b60208201526145f06040840161443e565b60408201526060830151606082015261460b60808401614580565b60808201529392505050565b82815260408101611cc260208301846142ea565b91825260ff16602082015260400190565b60006020828403121561464e57600080fd5b611cc282614580565b600080600080600080600060e0888a03121561467257600080fd5b875161467d81613faa565b602089015190975061468e81613fef565b955061469c6040890161442e565b94506146aa6060890161442e565b93506146b86080890161443e565b92506146c660a0890161443e565b91506146d460c0890161443e565b905092959891949750929550565b6000602082840312156146f457600080fd5b81516001600160401b0381111561470a57600080fd5b614426848285016143e1565b60006020828403121561472857600080fd5b8151611cc281613fef565b6000806000806080858703121561474957600080fd5b84516147548161409a565b60208601519094506147658161409a565b60408601519093506147768161409a565b60608601519092506147878161409a565b939692955090935050565b600080604083850312156147a557600080fd5b82516147b08161409a565b6020840151909250613fe48161409a565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115612a6957612a696147c1565b60008060008060008060c0878903121561480d57600080fd5b865161481881613faa565b80965050602087015194506040870151935060608701519250608087015161483f81613fef565b60a08801519092506148508161409a565b809150509295509295509295565b60006020828403121561487057600080fd5b611cc28261442e565b6000806000806080858703121561488f57600080fd5b845161489a81613faa565b6020860151604087015191955093506148b281613fef565b91506148c06060860161442e565b905092959194509250565b63ffffffff828116828216039080821115612a6957612a696147c1565b80820281158282048414176107c2576107c26147c1565b60008261491c57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107c2576107c26147c1565b808201808211156107c2576107c26147c1565b63ffffffff818116838216028082169190828114614967576149676147c1565b505092915050565b600063ffffffff808316818103614988576149886147c1565b6001019392505050565b600082516149a4818460208701614130565b919091019291505056fe52cf95d4800dbd9d79fecf9c78327e2f578c08091413b6d49037953c7a06fa35189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc12f4dc5b5d4c737ec034e6ccc4dc7dfd5a8e64278712100d7fab8bb99c850a2ea26469706673582212206f4c96d9f00b301b78f55f6ced92902db23cb586fd7b57f59d2b8c8e2ac6e86d64736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106101e55760003560e01c806301ffc9a71461024357806307a9bbbb1461027857806308bbb824146102a65780630962ef79146102c65780630f20d6f8146102e657806315fa1bdf1461030657806317f7f2ea14610319578063248a9ca3146103395780632e17de78146103595780632f2ff15d1461037957806336568abe146103995780633f4ba83a146103b9578063454b0608146103ce5780634bf5d7e9146103e15780634f1ef28614610403578063505279b41461041657806352d1902d1461043d57806354fd4d5014610452578063584a983f146104665780635c975abb146104795780635d21e15b1461048e578063604f2177146104a357806366980b27146104b657806369e79b7d146104d857806371569e2f146104f85780638456cb591461051857806391d148541461052d57806391ddadf41461054d5780639835fc7e1461056f5780639af02d9d1461058f578063a217fddf146105af578063ad3cb1cc146105c4578063b0d76cad146105f5578063c728b7401461061f578063d547741f1461063f578063e27351341461065f578063eabfa0441461067f578063f040812e146106ac578063f18ac150146106e9578063f2d804ef146106fe578063f4655cd11461071e578063f72c0d8b1461074b57600080fd5b3661023e5760006101f461076d565b60018101549091506001600160a01b0316331480159061021e575080546001600160a01b03163314155b1561023c576040516380c6edb160e01b815260040160405180910390fd5b005b600080fd5b34801561024f57600080fd5b5061026361025e366004613f67565b610791565b60405190151581526020015b60405180910390f35b34801561028457600080fd5b50610298610293366004613f91565b6107c8565b60405190815260200161026f565b3480156102b257600080fd5b5061023c6102c1366004613fbf565b6107e8565b3480156102d257600080fd5b5061023c6102e1366004613f91565b6108d5565b3480156102f257600080fd5b50610298610301366004613f91565b610907565b610298610314366004613ffe565b61091a565b34801561032557600080fd5b5061023c6103343660046140ac565b610ad5565b34801561034557600080fd5b50610298610354366004613f91565b610cb8565b34801561036557600080fd5b5061023c610374366004613f91565b610cd8565b34801561038557600080fd5b5061023c610394366004613fbf565b61113d565b3480156103a557600080fd5b5061023c6103b4366004613fbf565b611159565b3480156103c557600080fd5b5061023c611191565b61023c6103dc366004613f91565b6111a4565b3480156103ed57600080fd5b506103f66113c1565b60405161026f9190614154565b61023c6104113660046141ae565b611439565b34801561042257600080fd5b5061043065456e6572677981565b60405161026f9190614240565b34801561044957600080fd5b50610298611458565b34801561045e57600080fd5b506001610298565b61023c610474366004613fbf565b611475565b34801561048557600080fd5b5061026361169d565b34801561049a57600080fd5b506104306116b2565b6102986104b1366004614254565b6116d0565b3480156104c257600080fd5b506104cb606481565b60405161026f9190614271565b3480156104e457600080fd5b5061023c6104f3366004613f91565b611820565b34801561050457600080fd5b50610263610513366004613f91565b611c7e565b34801561052457600080fd5b5061023c611cc9565b34801561053957600080fd5b50610263610548366004613fbf565b611cdc565b34801561055957600080fd5b50610562611d12565b60405161026f919061427f565b34801561057b57600080fd5b5061029861058a366004613f91565b611d81565b34801561059b57600080fd5b5061023c6105aa366004614292565b611d96565b3480156105bb57600080fd5b50610298600081565b3480156105d057600080fd5b506103f6604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561060157600080fd5b5061060a611df0565b60405163ffffffff909116815260200161026f565b34801561062b57600080fd5b5061029861063a366004613f91565b611e09565b34801561064b57600080fd5b5061023c61065a366004613fbf565b611e75565b34801561066b57600080fd5b5061029861067a3660046142af565b611e91565b34801561068b57600080fd5b5061069f61069a366004613f91565b611ea5565b60405161026f919061430c565b3480156106b857600080fd5b506106cc6106c7366004613f91565b611ebe565b6040805163ffffffff93841681529290911660208301520161026f565b3480156106f557600080fd5b506104cb609681565b34801561070a57600080fd5b50610298610719366004614388565b611edb565b34801561072a57600080fd5b5061073e610739366004613f91565b611f1e565b60405161026f91906143b6565b34801561075757600080fd5b506102986000805160206149cf83398151915281565b7faf70fbb7e0f95b3e16b002fff11ff1ea2145b66dd31261eff20d74fda974970090565b60006001600160e01b03198216637965db0b60e01b14806107c257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806107d361076d565b60009384526002016020525050604090205490565b6107f0611f31565b8160006107fb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087091906143c4565b90506001600160a01b03811633146108a6573360405163ea93ab6d60e01b815260040161089d9190614240565b60405180910390fd5b6108ae611f59565b60006108b861076d565b90506108c5818787611f8f565b506108ce6126cc565b5050505050565b6108dd611f31565b6108e5611f59565b60006108ef61076d565b90506108fb81836126dd565b506109046126cc565b50565b60006107c261091461076d565b8361286d565b6000610924611f31565b61092c611f59565b600061093661076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d7799919061096e908890600401614271565b600060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b39190810190614455565b90508060a0015134146109e25760a0810151604051636b78e9ed60e01b815261089d9187913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c90610a169088903390600401614532565b6020604051808303816000875af1158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a59919061454e565b600183015460405163996fa25560e01b81529194506001600160a01b03169063996fa25590610a8e9033908790600401614567565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b50505050610acb828486611f8f565b50506107c26126cc565b6000610adf61298c565b805490915060ff600160401b82041615906001600160401b0316600081158015610b065750825b90506000826001600160401b03166001148015610b225750303b155b905081158015610b30575080155b15610b4e5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610b7757845460ff60401b1916600160401b1785555b60208601516001600160a01b03161580610b99575085516001600160a01b0316155b80610baf575060408601516001600160a01b0316155b80610bc25750606086015163ffffffff16155b15610be057604051637676b39760e01b815260040160405180910390fd5b610be86129b0565b610bf06129b0565b610bf86129b8565b8551610c06906000906129c8565b506000610c1161076d565b602088015181546001600160a01b039182166001600160a01b031991821617835560408a015160018401805491909316911617905560608801516005909101805463ffffffff90921663ffffffff19909216919091179055508315610cb057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610cc3612a70565b60009384526020525050604090206001015490565b610ce0611f31565b806000610ceb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906143c4565b90506001600160a01b0381163314610d8d573360405163ea93ab6d60e01b815260040161089d9190614240565b610d95611f59565b6000610d9f61076d565b90506000610dad8287612a94565b6001830154604051631c96a19760e31b8152600481018990529192506000916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190614596565b905060028260e001516003811115610e3c57610e3c6142d4565b03610e5f5786600260405163d5a996d160e01b815260040161089d929190614617565b60008260e001516003811115610e7757610e776142d4565b14610f255782548251604051636f87183d60e11b81526001600160a01b039092169163df0e307a91610eaf9160040190815260200190565b600060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b50505050816000015182602001516001600160a01b0316886000805160206149af83398151915285604001518560200151604051610f1c92919061462b565b60405180910390a45b60018260e001516003811115610f3d57610f3d6142d4565b03610fe857816000015182602001516001600160a01b031688600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061463c565b604051610fdf919061427f565b60405180910390a45b610ff28388612c70565b156110105760405163462cd83f60e01b815260040160405180910390fd5b61101a83886126dd565b6110248388612cd8565b6001830154604051630852cd8d60e31b8152600481018990526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b5050505080606001514710156110b857606081015160405163b7ddd88b60e01b8152476004820152602481019190915260440161089d565b606081015160405160009133918381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061112b5760608201516040516376ac9b2760e11b815261089d913391600401614567565b505050506111376126cc565b50505050565b61114682610cb8565b61114f81612d03565b61113783836129c8565b6001600160a01b03811633146111825760405163334bd91960e11b815260040160405180910390fd5b61118c8282612d0d565b505050565b600061119c81612d03565b610904612d85565b6111ac611f31565b6111b4611f59565b60006111be61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b91906143c4565b6001600160a01b031663a574cea4846040518263ffffffff1660e01b815260040161126891815260200190565b60e060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506112e591508590600401614271565b600060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132a9190810190614455565b60a00151905080341461135657818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018690526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561139e57600080fd5b505af11580156113b2573d6000803e3d6000fd5b505050505050506109046126cc565b606073__$7df4da9b1a17d9d425275d1becdd020933$__634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865af415801561140c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261143491908101906146e2565b905090565b611441612ddc565b61144a82612e81565b6114548282612e99565b5050565b6000611462612f4d565b506000805160206149ef83398151915290565b61147d611f31565b611485611f59565b600061148f61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c91906143c4565b6001600160a01b031663a574cea4856040518263ffffffff1660e01b815260040161153991815260200190565b60e060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506115b691508590600401614271565b600060405180830381865afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fb9190810190614455565b60a00151905080341461162757818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018790526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561166f57600080fd5b505af1158015611683573d6000803e3d6000fd5b50505050611692838686611f8f565b5050506114546126cc565b6000806116a8612f96565b5460ff1692915050565b6000806116bd61076d565b600101546001600160a01b031692915050565b60006116da611f31565b6116e2611f59565b60006116ec61076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d77999190611724908790600401614271565b600060405180830381865afa158015611741573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117699190810190614455565b90508060a0015134146117985760a0810151604051636b78e9ed60e01b815261089d9186913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c906117cc9087903390600401614532565b6020604051808303816000875af11580156117eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180f919061454e565b9250505061181b6126cc565b919050565b611828611f31565b80600061183361076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a891906143c4565b90506001600160a01b03811633146118d5573360405163ea93ab6d60e01b815260040161089d9190614240565b6118dd611f59565b60006118e761076d565b600086815260028201602052604081205491925081900361191e57604051630b14099f60e31b81526004810187905260240161089d565b600061192a8388612a94565b905060018160e001516003811115611944576119446142d4565b03611a5e578254604051636f87183d60e11b8152600481018490526001600160a01b039091169063df0e307a90602401600060405180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b50505050602081015160408083015160018601549151633404591760e21b8152600481018b905285936001600160a01b03908116938c936000805160206149af8339815191529390929091169063d011645c90602401602060405180830381865afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a399190614716565b604051611a4792919061462b565b60405180910390a4611a598388612cd8565b611b28565b60028160e001516003811115611a7657611a766142d4565b03611b085760a081015163ffffffff90811614611aa6576040516337bd14f160e11b815260040160405180910390fd5b825460405163ce88abbd60e01b8152600481018490526001600160a01b039091169063ce88abbd90602401600060405180830381600087803b158015611aeb57600080fd5b505af1158015611aff573d6000803e3d6000fd5b50505050611b28565b60e081015160405163d5a996d160e01b815261089d918991600401614617565b82546020820151604051630d4f10ad60e11b81526000926001600160a01b031691631a9e215a91611b5c9190600401614240565b608060405180830381865afa158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d9190614733565b87546040516307a5b63360e11b815260048101899052919550600094506001600160a01b03169250630f4b6c6691506024016040805180830381865afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190614792565b915050611c308584602001518b856002611c2991906147d7565b6000612fba565b8383602001516001600160a01b03168a600080516020614a0f83398151915284604051611c69919063ffffffff91909116815260200190565b60405180910390a450505050506111376126cc565b600080611c8961076d565b600084815260028201602052604090205490915015801590611cc2575063ffffffff611cb58285612a94565b60a0015163ffffffff1614155b9392505050565b6000611cd481612d03565b610904613055565b600080611ce7612a70565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600073__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611434919061463c565b60006107c2611d8e61076d565b83600061309c565b6000611da181612d03565b8163ffffffff16600003611dc85760405163874e74df60e01b815260040160405180910390fd5b81611dd161076d565b600501805463ffffffff191663ffffffff929092169190911790555050565b6000611dfa61076d565b6005015463ffffffff16919050565b600080611e1461076d565b90506000611e228285613181565b90506002816003811115611e3857611e386142d4565b14611e47575060009392505050565b6000611e5383866134bf565b9150611e6c90508386611e678460016147d7565b613739565b95945050505050565b611e7e82610cb8565b611e8781612d03565b6111378383612d0d565b6000611cc2611e9e61076d565b848461309c565b611ead613f25565b6107c2611eb861076d565b83612a94565b600080611ed2611ecc61076d565b846134bf565b91509150915091565b600080611ee661076d565b6001600160a01b03851660009081526004820160205260409020909150611f0d90846138b5565b6001600160e01b0316949350505050565b60006107c2611f2b61076d565b83613181565b611f3961169d565b15611f575760405163d93c066560e01b815260040160405180910390fd5b565b6000611f63613902565b805490915060011901611f8957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000611f9b8484613181565b90506002816003811115611fb157611fb16142d4565b03611fd2576040516331bbcc6f60e01b81526004810184905260240161089d565b83546040516327cd4de160e01b81526000916001600160a01b0316906327cd4de190612002908690600401614240565b60c060405180830381865afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204391906147f4565b508954604051630d4f10ad60e11b8152919650600095506001600160a01b03169350631a9e215a925061207b91508790600401614240565b608060405180830381865afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614733565b509250505060ff82166002148015906120d9575060ff8216600114155b806120ea575063ffffffff81811614155b1561210a57836040516315a36a6960e11b815260040161089d9190614240565b6001860154604051636b10a8bf60e11b8152600481018790526001600160a01b039091169063d621517e90602401602060405180830381865afa158015612155573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612179919061485e565b1561219a5760405163258643a160e11b81526004810186905260240161089d565b6001860154604051631c96a19760e31b8152600481018790526000916001600160a01b03169063e4b50cb89060240160a060405180830381865afa1580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190614596565b9050806020015160ff166000036122375760405163124bad6360e31b81526004810187905260240161089d565b6000868152600288016020526040902054600385600381111561225c5761225c6142d4565b148061227957506001856003811115612277576122776142d4565b145b15612440578754604051630dd3570160e01b8152600481018390526000916001600160a01b031690630dd3570190602401608060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb9190614879565b50508a54604051636f87183d60e11b8152600481018690529293506001600160a01b03169163df0e307a9150602401600060405180830381600087803b15801561233457600080fd5b505af1158015612348573d6000803e3d6000fd5b5050505081816001600160a01b0316896000805160206149af8339815191528660600151876020015160405161237f92919061462b565b60405180910390a4600186600381111561239b5761239b6142d4565b0361243e5781816001600160a01b031689600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015612404573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612428919061463c565b604051612435919061427f565b60405180910390a45b505b8015612478576124508888612c70565b1561246e5760405163462cd83f60e01b815260040160405180910390fd5b61247888886126dd565b600188015460405163f057248560e01b8152600481018990526000916001600160a01b03169063f057248590602401602060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e8919061485e565b6124f35760646124f6565b60965b895460608501516040516312fe610b60e21b81526001600160a01b038b8116600483015260ff8516602483015293945060009390921691634bf9842c919060440160206040518083038185885af1158015612555573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061257a919061454e565b8a54604051630d4f10ad60e11b81529192506000916001600160a01b0390911690631a9e215a906125af908c90600401614240565b608060405180830381865afa1580156125cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f09190614733565b9350505050818b60020160008c81526020019081526020016000208190555080600161261c91906147d7565b60008b815260038d0160205260409020805463ffffffff191663ffffffff9290921691909117905561265c8b8a8c6126558560026147d7565b6001612fba565b81896001600160a01b03168b7fa0286778706a77850b9dd59b02210d97bb93f749fdde710fa08088f5a6bb962688606001518960200151886040516126b79392919092835260ff918216602084015216604082015260600190565b60405180910390a45050505050505050505050565b60006126d6613902565b6001905550565b6000806126ea84846134bf565b915091506126f88484612c70565b156127225760058401546001906127159063ffffffff16846147d7565b61271f91906148cb565b90505b60006127308585600061309c565b905080600003612741575050505050565b60018501546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e90602401602060405180830381865afa15801561278d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b191906143c4565b60008681526003880160205260409020805463ffffffff191663ffffffff868116919091179091559091506127f29065456e65726779908390859061392616565b8560020160008681526020019081526020016000205485826001600160a01b03167ff4cde2b5a31835b3dac5ba586238b7160063a46803ccbf2322db0933efe694ed85888860405161285d9392919092835263ffffffff918216602084015216604082015260600190565b60405180910390a4505050505050565b6001820154604051631c96a19760e31b81526004810183905260009182916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa1580156128bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e19190614596565b60018501546020820151604051636d77999160e01b81529293506000926001600160a01b0390921691636d7799919161291c91600401614271565b600060405180830381865afa158015612939573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129619190810190614455565b9050606481608001516001600160401b0316836060015161298291906148e8565b611e6c91906148ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611f5761397e565b6129c061397e565b611f576139a3565b6000806129d3612a70565b90506129df8484611cdc565b612a5f576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055612a153390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107c2565b60009150506107c2565b5092915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b612a9c613f25565b600082815260028401602052604081205490819003612afd5750506040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526107c2565b8354604051630dd3570160e01b8152600481018390526000918291829182916001600160a01b0390911690630dd3570190602401608060405180830381865afa158015612b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b729190614879565b8b546040516307a5b63360e11b8152600481018b9052949850929650909450925060009182916001600160a01b031690630f4b6c66906024016040805180830381865afa158015612bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612beb9190614792565b915091506000612bfb8b8b613181565b9050604051806101000160405280898152602001886001600160a01b031681526020018781526020018660ff1681526020018463ffffffff1681526020018363ffffffff1681526020018515158152602001826003811115612c5f57612c5f6142d4565b90529b9a5050505050505050505050565b6000806000612c7f85856134bf565b915091508063ffffffff168263ffffffff161115612ca2576000925050506107c2565b600585015463ffffffff16612cb783836148cb565b63ffffffff1610612ccd576001925050506107c2565b506000949350505050565b600090815260028201602090815260408083208390556003909301905220805463ffffffff19169055565b61090481336139c0565b600080612d18612a70565b9050612d248484611cdc565b15612a5f576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107c2565b612d8d6139eb565b6000612d97612f96565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612dd19190614240565b60405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612e6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612e576000805160206149ef833981519152546001600160a01b031690565b6001600160a01b031614155b15611f575760405163703e46dd60e11b815260040160405180910390fd5b6000805160206149cf83398151915261145481612d03565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ef3575060408051601f3d908101601f19168201909252612ef09181019061454e565b60015b612f125781604051634c9c8ce360e01b815260040161089d9190614240565b6000805160206149ef8339815191528114612f4357604051632a87526960e21b81526004810182905260240161089d565b61118c8383613a10565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f575760405163703e46dd60e11b815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b6000612fc6868561286d565b6001600160a01b0386166000908152600488016020526040812091925090612fee90856138b5565b6001600160e01b0316905060008361300f5761300a8383614921565b613019565b6130198383614934565b90506130498561302883613a66565b6001600160a01b038a16600090815260048c01602052604090209190613a9e565b50505050505050505050565b61305d611f31565b6000613067612f96565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612dc43390565b60008060006130ab86866134bf565b600588015491935091506000906130c89063ffffffff1686614947565b6130d290846147d7565b60058801549091506000906001906130f09063ffffffff16846147d7565b6130fa91906148cb565b90508263ffffffff168163ffffffff1611156131135750815b8263ffffffff168263ffffffff161115613134576000945050505050611cc2565b6000825b8263ffffffff168163ffffffff1611613174576131568a8a83613739565b6131609083614934565b91508061316c8161496f565b915050613138565b5098975050505050505050565b60008181526002830160205260408120548082036131a35760009150506107c2565b8354604051630dd3570160e01b81526004810183905260009182916001600160a01b0390911690630dd3570190602401608060405180830381865afa1580156131f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132149190614879565b509193509150506001600160a01b03821661323557600093505050506107c2565b85546040516327cd4de160e01b81526000916001600160a01b0316906327cd4de190613265908690600401614240565b60c060405180830381865afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a691906147f4565b508b546040516307a5b63360e11b8152600481018b9052919650600095508594506001600160a01b03169250630f4b6c6691506024016040805180830381865afa1580156132f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331c9190614792565b8a54604051630d4f10ad60e11b81529294509092506000916001600160a01b0390911690631a9e215a90613354908990600401614240565b608060405180830381865afa158015613371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133959190614733565b935050505060008160016133a991906147d7565b905063ffffffff838116811480159180841690871611159060009083906133db57508363ffffffff168663ffffffff16105b905060ff881615806133f0575060ff88166003145b156134095760039b5050505050505050505050506107c2565b80156134235760039b5050505050505050505050506107c2565b63ffffffff8781161480159061343e575063ffffffff868116145b8015613448575088155b156134615760039b5050505050505050505050506107c2565b60001960ff8916016134815760019b5050505050505050505050506107c2565b60ff88166002148015613492575081155b156134ab5760019b5050505050505050505050506107c2565b5060029d9c50505050505050505050505050565b600081815260028301602052604081205481908082036134e6576000809250925050613732565b8454604051630dd3570160e01b8152600481018390526000916001600160a01b031690630dd3570190602401608060405180830381865afa15801561352f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135539190614879565b50919250506001600160a01b038216905061357657600080935093505050613732565b85546040516307a5b63360e11b81526004810184905260009182916001600160a01b0390911690630f4b6c66906024016040805180830381865afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e69190614792565b8954604051630d4f10ad60e11b81529294509092506000916001600160a01b0390911690631a9e215a9061361e908790600401614240565b608060405180830381865afa15801561363b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365f9190614733565b9350505050600081600161367391906147d7565b60008a815260038c016020526040812054919250906136999063ffffffff1660016147d7565b90508463ffffffff168163ffffffff1610156136b25750835b63ffffffff848116148015906136d357508163ffffffff168463ffffffff16105b80156136ea57508063ffffffff168463ffffffff16115b156136ff579750919550613732945050505050565b8163ffffffff168163ffffffff161015613723579750909550613732945050505050565b60008098509850505050505050505b9250929050565b60008281526002840160205260408082205485549151630dd3570160e01b815260048101829052909183916001600160a01b0390911690630dd3570190602401608060405180830381865afa158015613796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ba9190614879565b5050875460405163fddff03960e01b81526001600160a01b03808516600483015263ffffffff89166024830152939450600093909116915063fddff03990604401602060405180830381865afa158015613818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383c919061454e565b9050600061384a888861286d565b6001600160a01b038416600090815260048a01602052604081209192509061387290886138b5565b6001600160e01b031690508060000361389357600095505050505050611cc2565b8061389e84846148e8565b6138a891906148ff565b9998505050505050505050565b8154600090816138c785858385613ab9565b90508015612ccd576138ec856138de600184614921565b600091825260209091200190565b54600160201b90046001600160e01b0316611e6c565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b61118c83846001600160a01b031663a9059cbb858560405160240161394c929190614567565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613b17565b613986613b71565b611f5757604051631afcd79f60e31b815260040160405180910390fd5b6139ab61397e565b60006139b5612f96565b805460ff1916905550565b6139ca8282611cdc565b61145457808260405163e2517d3f60e01b815260040161089d929190614567565b6139f361169d565b611f5757604051638dfc202b60e01b815260040160405180910390fd5b613a1982613b8b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613a5e5761118c8282613be7565b611454613c54565b60006001600160e01b03821115613a9a576040516306dfcc6560e41b815260e060048201526024810183905260440161089d565b5090565b600080613aac858585613c73565b915091505b935093915050565b60005b81831015613b0f576000613ad08484613de3565b60008781526020902090915063ffffffff86169082015463ffffffff161115613afb57809250613b09565b613b06816001614934565b93505b50613abc565b509392505050565b6000613b2c6001600160a01b03841683613dfe565b90508051600014158015613b51575080806020019051810190613b4f919061485e565b155b1561118c5782604051635274afe760e01b815260040161089d9190614240565b6000613b7b61298c565b54600160401b900460ff16919050565b806001600160a01b03163b600003613bb85780604051634c9c8ce360e01b815260040161089d9190614240565b6000805160206149ef83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613c049190614992565b600060405180830381855af49150503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5091509150611e6c858383613e0c565b3415611f575760405163b398979f60e01b815260040160405180910390fd5b825460009081908015613d8a576000613c91876138de600185614921565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509087161015613ce357604051632520601d60e01b815260040160405180910390fd5b805163ffffffff808816911603613d2b5784613d04886138de600186614921565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055613d7a565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b602001519250839150613ab19050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081613ab1565b6000613df260028484186148ff565b611cc290848416614934565b6060611cc283836000613e5f565b606082613e2157613e1c82613efc565b611cc2565b8151158015613e3857506001600160a01b0384163b155b15613e585783604051639996b31560e01b815260040161089d9190614240565b5080611cc2565b606081471015613e84573060405163cd78605960e01b815260040161089d9190614240565b600080856001600160a01b03168486604051613ea09190614992565b60006040518083038185875af1925050503d8060008114613edd576040519150601f19603f3d011682016040523d82523d6000602084013e613ee2565b606091505b5091509150613ef2868383613e0c565b9695505050505050565b805115613f0c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082015290565b600060208284031215613f7957600080fd5b81356001600160e01b031981168114611cc257600080fd5b600060208284031215613fa357600080fd5b5035919050565b6001600160a01b038116811461090457600080fd5b60008060408385031215613fd257600080fd5b823591506020830135613fe481613faa565b809150509250929050565b60ff8116811461090457600080fd5b6000806040838503121561401157600080fd5b823561401c81613fef565b91506020830135613fe481613faa565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156140645761406461402c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156140925761409261402c565b604052919050565b63ffffffff8116811461090457600080fd5b6000608082840312156140be57600080fd5b604051608081016001600160401b03811182821017156140e0576140e061402c565b60405282356140ee81613faa565b815260208301356140fe81613faa565b6020820152604083013561411181613faa565b604082015260608301356141248161409a565b60608201529392505050565b60005b8381101561414b578181015183820152602001614133565b50506000910152565b6020815260008251806020840152614173816040850160208701614130565b601f01601f19169190910160400192915050565b60006001600160401b038211156141a0576141a061402c565b50601f01601f191660200190565b600080604083850312156141c157600080fd5b82356141cc81613faa565b915060208301356001600160401b038111156141e757600080fd5b8301601f810185136141f857600080fd5b803561420b61420682614187565b61406a565b81815286602083850101111561422057600080fd5b816020840160208301376000602083830101528093505050509250929050565b6001600160a01b0391909116815260200190565b60006020828403121561426657600080fd5b8135611cc281613fef565b60ff91909116815260200190565b65ffffffffffff91909116815260200190565b6000602082840312156142a457600080fd5b8135611cc28161409a565b600080604083850312156142c257600080fd5b823591506020830135613fe48161409a565b634e487b7160e01b600052602160045260246000fd5b6004811061430857634e487b7160e01b600052602160045260246000fd5b9052565b6000610100820190508251825260018060a01b0360208401511660208301526040830151604083015260ff6060840151166060830152608083015163ffffffff80821660808501528060a08601511660a0850152505060c083015161437560c084018215159052565b5060e0830151612a6960e08401826142ea565b6000806040838503121561439b57600080fd5b82356143a681613faa565b91506020830135613fe48161409a565b602081016107c282846142ea565b6000602082840312156143d657600080fd5b8151611cc281613faa565b600082601f8301126143f257600080fd5b815161440061420682614187565b81815284602083860101111561441557600080fd5b614426826020830160208701614130565b949350505050565b8051801515811461181b57600080fd5b80516001600160401b038116811461181b57600080fd5b60006020828403121561446757600080fd5b81516001600160401b038082111561447e57600080fd5b9083019060c0828603121561449257600080fd5b61449a614042565b8251828111156144a957600080fd5b6144b5878286016143e1565b8252506144c46020840161442e565b6020820152604083015191506144d982613fef565b8160408201526144eb6060840161443e565b60608201526144fc6080840161443e565b608082015260a083015160a082015280935050505092915050565b60ff9390931683526020830191909152604082015260600190565b60ff9290921682526001600160a01b0316602082015260400190565b60006020828403121561456057600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b805165ffffffffffff8116811461181b57600080fd5b600060a082840312156145a857600080fd5b60405160a081016001600160401b03811182821017156145ca576145ca61402c565b6040528251815260208301516145df81613fef565b60208201526145f06040840161443e565b60408201526060830151606082015261460b60808401614580565b60808201529392505050565b82815260408101611cc260208301846142ea565b91825260ff16602082015260400190565b60006020828403121561464e57600080fd5b611cc282614580565b600080600080600080600060e0888a03121561467257600080fd5b875161467d81613faa565b602089015190975061468e81613fef565b955061469c6040890161442e565b94506146aa6060890161442e565b93506146b86080890161443e565b92506146c660a0890161443e565b91506146d460c0890161443e565b905092959891949750929550565b6000602082840312156146f457600080fd5b81516001600160401b0381111561470a57600080fd5b614426848285016143e1565b60006020828403121561472857600080fd5b8151611cc281613fef565b6000806000806080858703121561474957600080fd5b84516147548161409a565b60208601519094506147658161409a565b60408601519093506147768161409a565b60608601519092506147878161409a565b939692955090935050565b600080604083850312156147a557600080fd5b82516147b08161409a565b6020840151909250613fe48161409a565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115612a6957612a696147c1565b60008060008060008060c0878903121561480d57600080fd5b865161481881613faa565b80965050602087015194506040870151935060608701519250608087015161483f81613fef565b60a08801519092506148508161409a565b809150509295509295509295565b60006020828403121561487057600080fd5b611cc28261442e565b6000806000806080858703121561488f57600080fd5b845161489a81613faa565b6020860151604087015191955093506148b281613fef565b91506148c06060860161442e565b905092959194509250565b63ffffffff828116828216039080821115612a6957612a696147c1565b80820281158282048414176107c2576107c26147c1565b60008261491c57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107c2576107c26147c1565b808201808211156107c2576107c26147c1565b63ffffffff818116838216028082169190828114614967576149676147c1565b505092915050565b600063ffffffff808316818103614988576149886147c1565b6001019392505050565b600082516149a4818460208701614130565b919091019291505056fe52cf95d4800dbd9d79fecf9c78327e2f578c08091413b6d49037953c7a06fa35189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc12f4dc5b5d4c737ec034e6ccc4dc7dfd5a8e64278712100d7fab8bb99c850a2ea26469706673582212206f4c96d9f00b301b78f55f6ced92902db23cb586fd7b57f59d2b8c8e2ac6e86d64736f6c63430008140033",
  "linkReferences": {
    "contracts/mocks/Stargate/StargateNFT/libraries/Clock.sol": {
      "Clock": [
        {
          "length": 20,
          "start": 4203
        },
        {
          "length": 20,
          "start": 5321
        },
        {
          "length": 20,
          "start": 7706
        },
        {
          "length": 20,
          "start": 9409
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/mocks/Stargate/StargateNFT/libraries/Clock.sol": {
      "Clock": [
        {
          "length": 20,
          "start": 3943
        },
        {
          "length": 20,
          "start": 5061
        },
        {
          "length": 20,
          "start": 7446
        },
        {
          "length": 20,
          "start": 9149
        }
      ]
    }
  }
}
