60806040523480156200001157600080fd5b5060405162001fdd38038062001fdd833981016040819052620000349162000197565b81818181600362000046838262000290565b50600462000055828262000290565b505050620000726200006c6200007c60201b60201c565b62000080565b505050506200035c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000fa57600080fd5b81516001600160401b0380821115620001175762000117620000d2565b604051601f8301601f19908116603f01168101908282118183101715620001425762000142620000d2565b816040528381526020925086838588010111156200015f57600080fd5b600091505b8382101562000183578582018301518183018401529082019062000164565b600093810190920192909252949350505050565b60008060408385031215620001ab57600080fd5b82516001600160401b0380821115620001c357600080fd5b620001d186838701620000e8565b93506020850151915080821115620001e857600080fd5b50620001f785828601620000e8565b9150509250929050565b600181811c908216806200021657607f821691505b6020821081036200023757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028b57600081815260208120601f850160051c81016020861015620002665750805b601f850160051c820191505b81811015620002875782815560010162000272565b5050505b505050565b81516001600160401b03811115620002ac57620002ac620000d2565b620002c481620002bd845462000201565b846200023d565b602080601f831160018114620002fc5760008415620002e35750858301515b600019600386901b1c1916600185901b17855562000287565b600085815260208120601f198616915b828110156200032d578886015182559484019460019091019084016200030c565b50858210156200034c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611c71806200036c6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637c3906e011610125578063b8e3bfbc116100ad578063dd62ed3e1161007c578063dd62ed3e146104a0578063e1964621146104b3578063e30443bc146104d3578063f2fde38b146104e6578063fbcbc0f1146104f957600080fd5b8063b8e3bfbc14610468578063bb06f2711461047b578063ccc29bf614610484578063d1b812cd1461048d57600080fd5b806395d89b41116100f457806395d89b41146103f1578063a457c2d7146103f9578063a8b9d2401461040c578063a9059cbb1461041f578063aafd847a1461043257600080fd5b80637c3906e01461039a578063807ab4f7146103ba5780638da5cb5b146103cd57806391b89fba146103de57600080fd5b8063497ec823116101a85780636a474002116101775780636a4740021461034557806370a082311461034d578063715018a614610376578063757e4b5b1461037e5780637bbbed361461039157600080fd5b8063497ec823146102db5780634e7b827f146102ee5780635fcbd2851461031157806360aa39911461033c57600080fd5b806323b872dd116101e457806323b872dd1461027e57806327ce014714610291578063313ce567146102b957806339509351146102c857600080fd5b80630483f7a01461021657806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c575b600080fd5b6102296102243660046119ac565b61054b565b005b61023361062f565b60405161024091906119e3565b60405180910390f35b61025c610257366004611a31565b6106c1565b6040519015158152602001610240565b6002545b604051908152602001610240565b61025c61028c366004611a5b565b6106db565b6102a461029f366004611a97565b6106ff565b60408051928352602083019190915201610240565b60405160128152602001610240565b61025c6102d6366004611a31565b6107be565b6102296102e9366004611ab2565b6107e0565b61025c6102fc366004611a97565b60126020526000908152604090205460ff1681565b600654610324906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b61027060115481565b6102296108ce565b61027061035b366004611a97565b6001600160a01b031660009081526020819052604090205490565b6102296108db565b61022961038c366004611ae5565b6108ef565b610270600f5481565b6102706103a8366004611a97565b60136020526000908152604090205481565b61025c6103c8366004611a97565b610a5e565b6005546001600160a01b0316610324565b6102a46103ec366004611a97565b610b3d565b610233610b52565b61025c610407366004611a31565b610b61565b6102a461041a366004611a97565b610bdc565b61025c61042d366004611a31565b610c43565b6102a4610440366004611a97565b6001600160a01b03166000908152600c6020908152604080832054600d909252909120549091565b610229610476366004611ab2565b610c51565b61027060105481565b610270600e5481565b600754610324906001600160a01b031681565b6102706104ae366004611ab2565b610c87565b6102706104c1366004611a97565b60146020526000908152604090205481565b6102296104e1366004611a31565b610cb2565b6102296104f4366004611a97565b610ce4565b61050c610507366004611a97565b610d5d565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610240565b610553610e3b565b6001600160a01b03821660009081526012602052604090205481151560ff90911615150361058057600080fd5b6001600160a01b0382166000908152601260205260409020805460ff19168215159081179091556001036105be576105b9826000610e95565b6105e6565b6105e6826105e1846001600160a01b031660009081526020819052604090205490565b610e95565b816001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be82604051610623911515815260200190565b60405180910390a25050565b60606003805461063e90611b07565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90611b07565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b5050505050905090565b6000336106cf818585610ef4565b60019150505b92915050565b6000336106e9858285611018565b6106f485858561108c565b506001949350505050565b6001600160a01b0381166000908152600a60209081526040808320549183905282205482918291600160801b9161075691610751919061074b9061074690600854906110e7565b611170565b90611180565b6111be565b6107609190611b57565b6001600160a01b0385166000908152600b6020908152604080832054918390528220549293509091600160801b916107a891610751919061074b9061074690600954906110e7565b6107b29190611b57565b91959194509092505050565b6000336106cf8185856107d18383610c87565b6107db9190611b79565b610ef4565b6107e8610e3b565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a9190611b8c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c99190611ba5565b505050565b6108d7336111d1565b5050565b6108e3610e3b565b6108ed60006114ea565b565b6108f7610e3b565b600061090260025490565b116109635760405162461bcd60e51b815260206004820152602660248201527f546f74616c20737570706c79206d7573742062652067726561746572207468616044820152656e207a65726f60d01b60648201526084015b60405180910390fd5b81156109df5761099661097560025490565b61098384600160801b6110e7565b61098d9190611b57565b6008549061153c565b60085560405182815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600e546109db908361153c565b600e555b80156108d757610a126109f160025490565b6109ff83600160801b6110e7565b610a099190611b57565b6009549061153c565b60095560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600f54610a57908261153c565b600f555050565b6000610a68610e3b565b600080610a74846111d1565b90925090508115610ade576001600160a01b03841660008181526013602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610acc9085815260200190565b60405180910390a25060019392505050565b8015610b31576001600160a01b03841660008181526014602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610acc9084815260200190565b6001925050505b919050565b600080610b4983610bdc565b91509150915091565b60606004805461063e90611b07565b60003381610b6f8286610c87565b905083811015610bcf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095a565b6106f48286868403610ef4565b600080600080610beb856106ff565b6001600160a01b0387166000908152600c60205260409020549193509150610c1490839061159b565b6001600160a01b0386166000908152600d6020526040902054610c3890839061159b565b935093505050915091565b6000336106cf81858561108c565b610c59610e3b565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610cba610e3b565b6001600160a01b03821660009081526012602052604090205460ff166108d7576108d78282610e95565b610cec610e3b565b6001600160a01b038116610d515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095a565b610d5a816114ea565b50565b6000806000806000806000610db16040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0389168152610dc689610bdc565b506020820152610dd5896106ff565b608083015260608201526001600160a01b039890981660008181526013602090815260408083205460a08d01908152938352601482529091205460c08b018190528a5191909a01519151601054601154929c939b8c9b5091995090975095509350915050565b6005546001600160a01b031633146108ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095a565b6001600160a01b03821660009081526020819052604090205480821115610ed4576000610ec2838361159b565b9050610ece84826115dd565b50505050565b808210156108c9576000610ee8828461159b565b9050610ece848261168e565b6001600160a01b038316610f565760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095a565b6001600160a01b038216610fb75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110248484610c87565b90506000198114610ece578181101561107f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095a565b610ece8484848403610ef4565b60405162461bcd60e51b815260206004820152602a60248201527f5452495f4469766964656e645f547261636b65723a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161095a565b6000826000036110f9575060006106d5565b60006111058385611bc2565b9050826111128583611b57565b146111695760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161095a565b9392505050565b600081818112156106d557600080fd5b60008061118d8385611bd9565b9050600083121580156111a05750838112155b806111b557506000831280156111b557508381125b61116957600080fd5b6000808212156111cd57600080fd5b5090565b6000806000806000806111e387610bdc565b90925090508115611363576001600160a01b0387166000908152600c6020526040902054611211908361153c565b6001600160a01b0388166000908152600c60205260408120919091556010805484929061123f908490611b79565b90915550506040518281526001600160a01b038816907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a260065460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201859052600092169063a9059cbb906044016020604051808303816000875af11580156112d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fa9190611ba5565b90508061135d576001600160a01b0388166000908152600c6020526040902054611324908461159b565b6001600160a01b0389166000908152600c602052604081209190915560108054859290611352908490611c01565b909155506113619050565b8294505b505b80156114de576001600160a01b0387166000908152600d602052604090205461138c908261153c565b6001600160a01b0388166000908152600d6020526040812091909155601180548392906113ba908490611b79565b90915550506040518181526001600160a01b038816907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a260075460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114759190611ba5565b9050806114d8576001600160a01b0388166000908152600d602052604090205461149f908361159b565b6001600160a01b0389166000908152600d6020526040812091909155601180548492906114cd908490611c01565b909155506114dc9050565b8193505b505b50919590945092505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806115498385611b79565b9050838110156111695760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161095a565b600061116983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061171f565b6115e78282611759565b611621611602610746836008546110e790919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611818565b6001600160a01b0383166000908152600a602052604090205560095461166e9061164f9061074690846110e7565b6001600160a01b0384166000908152600b602052604090205490611818565b6001600160a01b039092166000908152600b602052604090209190915550565b6116988282611855565b6116d26116b3610746836008546110e790919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611180565b6001600160a01b0383166000908152600a602052604090205560095461166e906117009061074690846110e7565b6001600160a01b0384166000908152600b602052604090205490611180565b600081848411156117435760405162461bcd60e51b815260040161095a91906119e3565b5060006117508486611c01565b95945050505050565b6001600160a01b0382166117af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161095a565b80600260008282546117c19190611b79565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806118258385611c14565b9050600083121580156118385750838113155b806111b557506000831280156111b5575083811361116957600080fd5b6001600160a01b0382166118b55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161095a565b6001600160a01b038216600090815260208190526040902054818110156119295760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161095a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b80356001600160a01b0381168114610b3857600080fd5b8015158114610d5a57600080fd5b600080604083850312156119bf57600080fd5b6119c883611987565b915060208301356119d88161199e565b809150509250929050565b600060208083528351808285015260005b81811015611a10578581018301518582016040015282016119f4565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611a4457600080fd5b611a4d83611987565b946020939093013593505050565b600080600060608486031215611a7057600080fd5b611a7984611987565b9250611a8760208501611987565b9150604084013590509250925092565b600060208284031215611aa957600080fd5b61116982611987565b60008060408385031215611ac557600080fd5b611ace83611987565b9150611adc60208401611987565b90509250929050565b60008060408385031215611af857600080fd5b50508035926020909101359150565b600181811c90821680611b1b57607f821691505b602082108103611b3b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082611b7457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156106d5576106d5611b41565b600060208284031215611b9e57600080fd5b5051919050565b600060208284031215611bb757600080fd5b81516111698161199e565b80820281158282048414176106d5576106d5611b41565b8082018281126000831280158216821582161715611bf957611bf9611b41565b505092915050565b818103818111156106d5576106d5611b41565b8181036000831280158383131683831282161715611c3457611c34611b41565b509291505056fea26469706673582212201740d120c6e1ed05b9573978cf2dd66e777ad1519e386970d5eb04898636c44e64736f6c634300081400330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000145452495f4469766964656e645f547261636b657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000145452495f4469766964656e645f547261636b6572000000000000000000000000