UNPKG

@animoca/ethereum-contracts-sale

Version:
688 lines 69.2 kB
{
  "_format": "hh-sol-artifact-1",
  "contractName": "UniswapOracleSaleMock",
  "sourceName": "contracts/mocks/sale/UniswapOracleSaleMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "payoutWallet_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "skusCapacity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokensPerSkuCapacity",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "referenceToken",
          "type": "address"
        },
        {
          "internalType": "contract IUniswapV2Router",
          "name": "uniswapV2Router",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "names",
          "type": "bytes32[]"
        },
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "values",
          "type": "bytes32[]"
        }
      ],
      "name": "MagicValues",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "payoutWallet_",
          "type": "address"
        }
      ],
      "name": "PayoutWalletSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "purchaser",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "userData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extData",
          "type": "bytes"
        }
      ],
      "name": "Purchase",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxQuantityPerPurchase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "notificationsReceiver",
          "type": "address"
        }
      ],
      "name": "SkuCreation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "prices",
          "type": "uint256[]"
        }
      ],
      "name": "SkuPricingUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Started",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IUniswapV2Router",
          "name": "uniswapV2Router",
          "type": "address"
        }
      ],
      "name": "UniswapV2RouterSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "PRICE_CONVERT_VIA_ORACLE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUPPLY_UNLIMITED",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_ETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fromToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "toToken",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "callUnderscoreConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "conversionRates",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "rates",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxQuantityPerPurchase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "notificationsReceiver",
          "type": "address"
        }
      ],
      "name": "createSku",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "userData",
          "type": "bytes"
        }
      ],
      "name": "estimatePurchase",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalPrice",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "pricingData",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "getReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reserveA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        }
      ],
      "name": "getSkuInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "remainingSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxQuantityPerPurchase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "notificationsReceiver",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "prices",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSkus",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "skus",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "payoutWallet",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "userData",
          "type": "bytes"
        }
      ],
      "name": "purchaseFor",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "referenceToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "payoutWallet_",
          "type": "address"
        }
      ],
      "name": "setPayoutWallet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "start",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uniswapV2Router",
      "outputs": [
        {
          "internalType": "contract IUniswapV2Router",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "sku",
          "type": "bytes32"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "prices",
          "type": "uint256[]"
        }
      ],
      "name": "updateSkuPricing",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b50604051620037db380380620037db833981810160405260a08110156200003757600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916339081178255935195969495929493919287928792879287928792839288928892889288928692869286928592859285926001929091869183918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0381166200011d576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee915084906000906200020257fe5b60200260200101836000815181106200021757fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200025157fe5b60200260200101836001815181106200026657fe5b6020026020010182815250828152505050600080516020620037bb8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002cf578181015183820152602001620002b5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000310578181015183820152602001620002f6565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b03891617905550600094506001935084925062000357915050565b5060405190808252806020026020018201604052801562000382578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003df57fe5b6020026020010183600081518110620003f457fe5b6020026020010182815250828152505050600080516020620037bb8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156200045d57818101518382015260200162000443565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200049e57818101518382015260200162000484565b5050505090500194505050505060405180910390a1505050505050620004ca81620004db60201b60201c565b50505050505050505050506200052f565b600880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60805160a05161326862000553600039806121fa52508061157d52506132686000f3fe6080604052600436106101805760003560e01c80638456cb59116100d6578063a963b2571161007f578063d52bb6f411610059578063d52bb6f414610892578063f21f537d146108e6578063f2fde38b146108fb57610180565b8063a963b25714610719578063be9a6555146107ae578063c7b778db146107c357610180565b80639865bcc8116100b05780639865bcc81461065c5780639e0495451461065c578063a1e169081461068357610180565b80638456cb591461061d5780638488bb4e146106325780638da5cb5b1461064757610180565b80633f4ba83a116101385780635e6e9f70116101125780635e6e9f701461044a57806361bd3851146105855780636b8f9c43146105ea57610180565b80633f4ba83a146103f75780635c4fafc71461040c5780635c975abb1461042157610180565b80631694505e116101695780631694505e146102b35780632a8a45bc146102c85780632c87927b146103b057610180565b80631265b651146101855780631323b066146101b6575b600080fd5b34801561019157600080fd5b5061019a61092e565b604080516001600160a01b039092168252519081900360200190f35b3480156101c257600080fd5b50610258600480360360a08110156101d957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021957600080fd5b82018360208201111561022b57600080fd5b8035906020019184600183028401116401000000008311171561024d57600080fd5b50909250905061093d565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561029e578181015183820152602001610286565b50505050905001935050505060405180910390f35b3480156102bf57600080fd5b5061019a610a32565b3480156102d457600080fd5b506102f2600480360360208110156102eb57600080fd5b5035610a41565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561035757818101518382015260200161033f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561039657818101518382015260200161037e565b505050509050019850505050505050505060405180910390f35b3480156103bc57600080fd5b506103f5600480360360808110156103d357600080fd5b50803590602081013590604081013590606001356001600160a01b0316610be6565b005b34801561040357600080fd5b506103f5610bf8565b34801561041857600080fd5b5061019a610c66565b34801561042d57600080fd5b50610436610c7e565b604080519115158252519081900360200190f35b34801561045657600080fd5b506103f56004803603606081101561046d57600080fd5b8135919081019060408101602082013564010000000081111561048f57600080fd5b8201836020820111156104a157600080fd5b803590602001918460208302840111640100000000831117156104c357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c87945050505050565b34801561059157600080fd5b5061059a610e64565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105d65781810151838201526020016105be565b505050509050019250505060405180910390f35b3480156105f657600080fd5b506103f56004803603602081101561060d57600080fd5b50356001600160a01b0316610ebf565b34801561062957600080fd5b506103f5610f8c565b34801561063e57600080fd5b5061019a610ff3565b34801561065357600080fd5b5061019a611002565b34801561066857600080fd5b50610671611011565b60408051918252519081900360200190f35b34801561068f57600080fd5b50610671600480360360608110156106a657600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184600183028401116401000000008311171561070e57600080fd5b509092509050611017565b6103f5600480360360a081101561072f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460018302840111640100000000831117156107a357600080fd5b509092509050611063565b3480156107ba57600080fd5b506103f5611149565b3480156107cf57600080fd5b5061059a600480360360408110156107e657600080fd5b81019060208101813564010000000081111561080157600080fd5b82018360208201111561081357600080fd5b8035906020019184602083028401116401000000008311171561083557600080fd5b91939092909160208101903564010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b50909250905061115c565b34801561089e57600080fd5b506108cd600480360360408110156108b557600080fd5b506001600160a01b0381358116916020013516611248565b6040805192835260208301919091528051918290030190f35b3480156108f257600080fd5b506106716113a4565b34801561090757600080fd5b506103f56004803603602081101561091e57600080fd5b50356001600160a01b03166113aa565b6007546001600160a01b031681565b6000606060025460001415610999576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109a1611410565b6109a96131a0565b6109b1611468565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a228161146c565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a6760048301611493565b82549850905087610abf576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610af557600080fd5b50604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b3957600080fd5b50604051908082528060200260200182016040528015610b63578160200160208202803683370190505b50925060005b81811015610bda57600080610b816004860184611497565b915091508160001c878481518110610b9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bc557fe5b60209081029190910101525050600101610b69565b50505091939550919395565b610bf284848484611529565b50505050565b600254610c4c576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c5c610c57611468565b611760565b610c64611827565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610c92610c57611468565b815181518114610ce9576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d4a576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610d95576000610d5e82611493565b905060005b81811015610d8e576000610d778482611497565b509050610d84848261187f565b5050600101610d63565b5050610da0565b610da081868661195f565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e08578181015183820152602001610df0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e47578181015183820152602001610e2f565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610eb557602002820191906000526020600020905b815481526020019060010190808311610ea1575b5050505050905090565b610eca610c57611468565b6001600160a01b038116610f25576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610fe0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610feb610c57611468565b610c646119e7565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600061105a858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b95945050505050565b6002546110b7576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110bf611410565b6110c76131a0565b6110cf611468565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261114081611ba3565b50505050505050565b611154610c57611468565b610c5c611bd0565b6060838067ffffffffffffffff8111801561117657600080fd5b506040519080825280602002602001820160405280156111a0578160200160208202803683370190505b50915060005b8181101561123e5761121f8787838181106111bd57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b83828151811061122b57fe5b60209081029190910101526001016111a6565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156112ed57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561138f57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b505192505b6113998484611c52565b909590945092505050565b60025490565b6113b5610c57611468565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c64576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061147983611d1e565b61148283611fc8565b505060c081015160e0909101519091565b5490565b8154600090819083106114f1576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061150257fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261157b576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006115a66004611493565b106115f8576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61160360048561206a565b611654576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156116c657611675816001600160a01b03166120b4565b6116c6576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d60208110156117c357600080fd5b50516001600160a01b03828116911614611824576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61182f6120ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611862611468565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561195357835460001980830191908101906000908790839081106118b257fe5b90600052602060002090600202019050808760000184815481106118d257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061191157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506119599350505050565b60009150505b92915050565b61196a838383612111565b61197383611493565b158061199157506007546119919084906001600160a01b0316612275565b6119e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6119ef611410565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611862611468565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611ac957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9a57600080fd5b505afa158015611aae573d6000803e3d6000fd5b505050506040513d6020811015611ac457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b6b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3c57600080fd5b505afa158015611b50573d6000803e3d6000fd5b505050506040513d6020811015611b6657600080fd5b505192505b600080611b788686611c52565b9092509050611b9982611b9383670de0b6b3a764000061228d565b906122ed565b9695505050505050565b611bac81611d1e565b611bb581611fc8565b611bbe81612354565b611bc7816124a3565b611824816124ef565b60025415611c25576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611862611468565b6000806000611c6185856129d4565b509050600080611c718787612ac1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6060811015611cd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611d0d578082611d10565b81815b909890975095505050505050565b60208101516001600160a01b0316611d7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611ddc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611e32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611e98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ef5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611f5c57816080015181600101541015611f5c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611f776004830182612275565b6119e2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461202e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061203e8483612c24565b905061204b848383612c94565b610bf257608084015161205f90829061228d565b60c085015250505050565b60006120768383612275565b6120ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611959565b506000611959565b3b151590565b60035460ff16610c64576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156121f757600083828151811061212b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561219d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106121ab57fe5b6020026020010151905080600014156121d7576121d1866001600160a01b03841661187f565b506121ed565b6121eb866001600160a01b03841683612d8c565b505b5050600101612114565b507f000000000000000000000000000000000000000000000000000000000000000061222284611493565b11156119e2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60008261229c57506000611959565b828202828482816122a957fe5b04146122e65760405162461bcd60e51b81526004018080602001828103825260218152602001806132126021913960400191505060405180910390fd5b9392505050565b6000808211612343576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161234c57fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612477578060c001513410156123d6576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612414573d6000803e3d6000fd5b50600061242e8260c0015134612e2390919063ffffffff16565b905080156124715781516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561246f573d6000803e3d6000fd5b505b50611824565b611824612482611468565b60015460c084015160408501516001600160a01b0390811693921690612e80565b606081015160009081526006602052604090208054600019146124eb57608082015160018201546124d391612e23565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561258657818101518382015260200161256e565b50505050905001838051906020019060200280838360005b838110156125b657818101518382015260200161259e565b50505050905001828051906020019060200280838360005b838110156125e65781810151838201526020016125ce565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561265d578181015183820152602001612645565b50505050905090810190601f16801561268a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156126bd5781810151838201526020016126a5565b50505050905090810190601f1680156126ea5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b031680156124eb576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561282357818101518382015260200161280b565b50505050905090810190601f1680156128505780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561288557818101518382015260200161286d565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156128c45781810151838201526020016128ac565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156129035781810151838201526020016128eb565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561293457600080fd5b505af1158015612948573d6000803e3d6000fd5b505050506040513d602081101561295e57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000016146124eb576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b03161415612a3e576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612a5e578284612a61565b83835b90925090506001600160a01b038216611522576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b6000806000612ad085856129d4565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2257600080fd5b505afa158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6040820151600090612c409083906001600160a01b0316612f08565b905080611959576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214612ca7575060006122e6565b600754600090612cc19085906001600160a01b0316612f08565b604086015160075460a0880151929350600092612ce892916001600160a01b031690611a25565b90506000612d198760800151612d1384611b93670de0b6b3a76400008861228d90919063ffffffff16565b9061228d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612d4e57fe5b6020026020010181815250508160001b8760e00151600181518110612d6f57fe5b602090810291909101015260c08701525060019150509392505050565b600082815260018401602052604081205480612df15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556122e6565b82856000016001830381548110612e0457fe5b90600052602060002090600202016001018190555060009150506122e6565b600082821115612e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610bf2908590612f98565b600081815260018301602052604081205480612f6b576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612f7d57fe5b90600052602060002090600202016001015491505092915050565b81612fab6001600160a01b0382166120b4565b612ffc576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061305757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161301a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b9576040519150601f19603f3d011682016040523d82523d6000602084013e6130be565b606091505b5091509150811561313d57805115613138578080602001905160208110156130e557600080fd5b5051613138576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613199565b8051613190576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207bf162d0d6db3baa2a2e71f061b502ddf28ef9c654d65da6a878e54236364e6464736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14",
  "deployedBytecode": "0x6080604052600436106101805760003560e01c80638456cb59116100d6578063a963b2571161007f578063d52bb6f411610059578063d52bb6f414610892578063f21f537d146108e6578063f2fde38b146108fb57610180565b8063a963b25714610719578063be9a6555146107ae578063c7b778db146107c357610180565b80639865bcc8116100b05780639865bcc81461065c5780639e0495451461065c578063a1e169081461068357610180565b80638456cb591461061d5780638488bb4e146106325780638da5cb5b1461064757610180565b80633f4ba83a116101385780635e6e9f70116101125780635e6e9f701461044a57806361bd3851146105855780636b8f9c43146105ea57610180565b80633f4ba83a146103f75780635c4fafc71461040c5780635c975abb1461042157610180565b80631694505e116101695780631694505e146102b35780632a8a45bc146102c85780632c87927b146103b057610180565b80631265b651146101855780631323b066146101b6575b600080fd5b34801561019157600080fd5b5061019a61092e565b604080516001600160a01b039092168252519081900360200190f35b3480156101c257600080fd5b50610258600480360360a08110156101d957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021957600080fd5b82018360208201111561022b57600080fd5b8035906020019184600183028401116401000000008311171561024d57600080fd5b50909250905061093d565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561029e578181015183820152602001610286565b50505050905001935050505060405180910390f35b3480156102bf57600080fd5b5061019a610a32565b3480156102d457600080fd5b506102f2600480360360208110156102eb57600080fd5b5035610a41565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561035757818101518382015260200161033f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561039657818101518382015260200161037e565b505050509050019850505050505050505060405180910390f35b3480156103bc57600080fd5b506103f5600480360360808110156103d357600080fd5b50803590602081013590604081013590606001356001600160a01b0316610be6565b005b34801561040357600080fd5b506103f5610bf8565b34801561041857600080fd5b5061019a610c66565b34801561042d57600080fd5b50610436610c7e565b604080519115158252519081900360200190f35b34801561045657600080fd5b506103f56004803603606081101561046d57600080fd5b8135919081019060408101602082013564010000000081111561048f57600080fd5b8201836020820111156104a157600080fd5b803590602001918460208302840111640100000000831117156104c357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c87945050505050565b34801561059157600080fd5b5061059a610e64565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105d65781810151838201526020016105be565b505050509050019250505060405180910390f35b3480156105f657600080fd5b506103f56004803603602081101561060d57600080fd5b50356001600160a01b0316610ebf565b34801561062957600080fd5b506103f5610f8c565b34801561063e57600080fd5b5061019a610ff3565b34801561065357600080fd5b5061019a611002565b34801561066857600080fd5b50610671611011565b60408051918252519081900360200190f35b34801561068f57600080fd5b50610671600480360360608110156106a657600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184600183028401116401000000008311171561070e57600080fd5b509092509050611017565b6103f5600480360360a081101561072f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460018302840111640100000000831117156107a357600080fd5b509092509050611063565b3480156107ba57600080fd5b506103f5611149565b3480156107cf57600080fd5b5061059a600480360360408110156107e657600080fd5b81019060208101813564010000000081111561080157600080fd5b82018360208201111561081357600080fd5b8035906020019184602083028401116401000000008311171561083557600080fd5b91939092909160208101903564010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b50909250905061115c565b34801561089e57600080fd5b506108cd600480360360408110156108b557600080fd5b506001600160a01b0381358116916020013516611248565b6040805192835260208301919091528051918290030190f35b3480156108f257600080fd5b506106716113a4565b34801561090757600080fd5b506103f56004803603602081101561091e57600080fd5b50356001600160a01b03166113aa565b6007546001600160a01b031681565b6000606060025460001415610999576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109a1611410565b6109a96131a0565b6109b1611468565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a228161146c565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a6760048301611493565b82549850905087610abf576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610af557600080fd5b50604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b3957600080fd5b50604051908082528060200260200182016040528015610b63578160200160208202803683370190505b50925060005b81811015610bda57600080610b816004860184611497565b915091508160001c878481518110610b9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bc557fe5b60209081029190910101525050600101610b69565b50505091939550919395565b610bf284848484611529565b50505050565b600254610c4c576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c5c610c57611468565b611760565b610c64611827565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610c92610c57611468565b815181518114610ce9576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d4a576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610d95576000610d5e82611493565b905060005b81811015610d8e576000610d778482611497565b509050610d84848261187f565b5050600101610d63565b5050610da0565b610da081868661195f565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e08578181015183820152602001610df0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e47578181015183820152602001610e2f565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610eb557602002820191906000526020600020905b815481526020019060010190808311610ea1575b5050505050905090565b610eca610c57611468565b6001600160a01b038116610f25576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610fe0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610feb610c57611468565b610c646119e7565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600061105a858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b95945050505050565b6002546110b7576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110bf611410565b6110c76131a0565b6110cf611468565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261114081611ba3565b50505050505050565b611154610c57611468565b610c5c611bd0565b6060838067ffffffffffffffff8111801561117657600080fd5b506040519080825280602002602001820160405280156111a0578160200160208202803683370190505b50915060005b8181101561123e5761121f8787838181106111bd57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b83828151811061122b57fe5b60209081029190910101526001016111a6565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156112ed57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561138f57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b505192505b6113998484611c52565b909590945092505050565b60025490565b6113b5610c57611468565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c64576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061147983611d1e565b61148283611fc8565b505060c081015160e0909101519091565b5490565b8154600090819083106114f1576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061150257fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261157b576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006115a66004611493565b106115f8576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61160360048561206a565b611654576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156116c657611675816001600160a01b03166120b4565b6116c6576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d60208110156117c357600080fd5b50516001600160a01b03828116911614611824576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61182f6120ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611862611468565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561195357835460001980830191908101906000908790839081106118b257fe5b90600052602060002090600202019050808760000184815481106118d257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061191157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506119599350505050565b60009150505b92915050565b61196a838383612111565b61197383611493565b158061199157506007546119919084906001600160a01b0316612275565b6119e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6119ef611410565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611862611468565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611ac957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9a57600080fd5b505afa158015611aae573d6000803e3d6000fd5b505050506040513d6020811015611ac457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b6b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3c57600080fd5b505afa158015611b50573d6000803e3d6000fd5b505050506040513d6020811015611b6657600080fd5b505192505b600080611b788686611c52565b9092509050611b9982611b9383670de0b6b3a764000061228d565b906122ed565b9695505050505050565b611bac81611d1e565b611bb581611fc8565b611bbe81612354565b611bc7816124a3565b611824816124ef565b60025415611c25576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611862611468565b6000806000611c6185856129d4565b509050600080611c718787612ac1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6060811015611cd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611d0d578082611d10565b81815b909890975095505050505050565b60208101516001600160a01b0316611d7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611ddc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611e32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611e98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ef5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611f5c57816080015181600101541015611f5c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611f776004830182612275565b6119e2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461202e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061203e8483612c24565b905061204b848383612c94565b610bf257608084015161205f90829061228d565b60c085015250505050565b60006120768383612275565b6120ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611959565b506000611959565b3b151590565b60035460ff16610c64576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156121f757600083828151811061212b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561219d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106121ab57fe5b6020026020010151905080600014156121d7576121d1866001600160a01b03841661187f565b506121ed565b6121eb866001600160a01b03841683612d8c565b505b5050600101612114565b507f000000000000000000000000000000000000000000000000000000000000000061222284611493565b11156119e2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60008261229c57506000611959565b828202828482816122a957fe5b04146122e65760405162461bcd60e51b81526004018080602001828103825260218152602001806132126021913960400191505060405180910390fd5b9392505050565b6000808211612343576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161234c57fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612477578060c001513410156123d6576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612414573d6000803e3d6000fd5b50600061242e8260c0015134612e2390919063ffffffff16565b905080156124715781516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561246f573d6000803e3d6000fd5b505b50611824565b611824612482611468565b60015460c084015160408501516001600160a01b0390811693921690612e80565b606081015160009081526006602052604090208054600019146124eb57608082015160018201546124d391612e23565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561258657818101518382015260200161256e565b50505050905001838051906020019060200280838360005b838110156125b657818101518382015260200161259e565b50505050905001828051906020019060200280838360005b838110156125e65781810151838201526020016125ce565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561265d578181015183820152602001612645565b50505050905090810190601f16801561268a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156126bd5781810151838201526020016126a5565b50505050905090810190601f1680156126ea5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b031680156124eb576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561282357818101518382015260200161280b565b50505050905090810190601f1680156128505780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561288557818101518382015260200161286d565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156128c45781810151838201526020016128ac565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156129035781810151838201526020016128eb565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561293457600080fd5b505af1158015612948573d6000803e3d6000fd5b505050506040513d602081101561295e57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000016146124eb576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b03161415612a3e576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612a5e578284612a61565b83835b90925090506001600160a01b038216611522576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b6000806000612ad085856129d4565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2257600080fd5b505afa158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6040820151600090612c409083906001600160a01b0316612f08565b905080611959576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214612ca7575060006122e6565b600754600090612cc19085906001600160a01b0316612f08565b604086015160075460a0880151929350600092612ce892916001600160a01b031690611a25565b90506000612d198760800151612d1384611b93670de0b6b3a76400008861228d90919063ffffffff16565b9061228d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612d4e57fe5b6020026020010181815250508160001b8760e00151600181518110612d6f57fe5b602090810291909101015260c08701525060019150509392505050565b600082815260018401602052604081205480612df15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556122e6565b82856000016001830381548110612e0457fe5b90600052602060002090600202016001018190555060009150506122e6565b600082821115612e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610bf2908590612f98565b600081815260018301602052604081205480612f6b576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612f7d57fe5b90600052602060002090600202016001015491505092915050565b81612fab6001600160a01b0382166120b4565b612ffc576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061305757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161301a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b9576040519150601f19603f3d011682016040523d82523d6000602084013e6130be565b606091505b5091509150811561313d57805115613138578080602001905160208110156130e557600080fd5b5051613138576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613199565b8051613190576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207bf162d0d6db3baa2a2e71f061b502ddf28ef9c654d65da6a878e54236364e6464736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}