60806040526008805460ff191690553480156200001b57600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004c9160039162000078565b5080516200006290600490602084019062000078565b50506005805460ff19166012179055506200011d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000bb57805160ff1916838001178555620000eb565b82800160010185558215620000eb579182015b82811115620000eb578251825591602001919060010190620000ce565b50620000f9929150620000fd565b5090565b6200011a91905b80821115620000f9576000815560010162000104565b90565b612633806200012d6000396000f3fe6080604052600436106101f95760003560e01c80635353a2d81161010d578063a217fddf116100a0578063ca15c8731161006f578063ca15c87314610801578063cf2c52cb1461082b578063d547741f146108b6578063dd62ed3e146108ef578063de7ea79d1461092a576101f9565b8063a217fddf14610765578063a3b0b5a31461077a578063a457c2d71461078f578063a9059cbb146107c8576101f9565b80639010d07c116100dc5780639010d07c146106a157806391d14854146106ed57806395d89b4114610726578063a0712d681461073b576101f9565b80635353a2d8146105c9578063626381a01461064457806370a08231146106595780638acfcaf71461068c576101f9565b806323b872dd116101905780632f2ff15d1161015f5780632f2ff15d146104de578063313ce567146105175780633408e4701461054257806336568abe146105575780633950935114610590576101f9565b806323b872dd14610412578063248a9ca3146104555780632d0335ab1461047f5780632e1a7d4d146104b2576101f9565b80630dd7531a116101cc5780630dd7531a146103ac5780630f7e5970146103c157806318160ddd146103d657806320379ee5146103fd576101f9565b806306fdde03146101fe578063095ea7b3146102885780630b54817c146102d55780630c53c51c146102ea575b600080fd5b34801561020a57600080fd5b50610213610a07565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029457600080fd5b506102c1600480360360408110156102ab57600080fd5b506001600160a01b038135169060200135610a9e565b604080519115158252519081900360200190f35b3480156102e157600080fd5b50610213610abc565b610213600480360360a081101561030057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561032a57600080fd5b82018360208201111561033c57600080fd5b803590602001918460018302840111600160201b8311171561035d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020810135906040013560ff16610ad9565b3480156103b857600080fd5b50610213610ddc565b3480156103cd57600080fd5b50610213610df9565b3480156103e257600080fd5b506103eb610e16565b60408051918252519081900360200190f35b34801561040957600080fd5b506103eb610e1c565b34801561041e57600080fd5b506102c16004803603606081101561043557600080fd5b506001600160a01b03813581169160208101359091169060400135610e22565b34801561046157600080fd5b506103eb6004803603602081101561047857600080fd5b5035610eaf565b34801561048b57600080fd5b506103eb600480360360208110156104a257600080fd5b50356001600160a01b0316610ec4565b3480156104be57600080fd5b506104dc600480360360208110156104d557600080fd5b5035610edf565b005b3480156104ea57600080fd5b506104dc6004803603604081101561050157600080fd5b50803590602001356001600160a01b0316610ef3565b34801561052357600080fd5b5061052c610f5f565b6040805160ff9092168252519081900360200190f35b34801561054e57600080fd5b506103eb610f68565b34801561056357600080fd5b506104dc6004803603604081101561057a57600080fd5b50803590602001356001600160a01b0316610f6c565b34801561059c57600080fd5b506102c1600480360360408110156105b357600080fd5b506001600160a01b038135169060200135610fcd565b3480156105d557600080fd5b506104dc600480360360208110156105ec57600080fd5b810190602081018135600160201b81111561060657600080fd5b82018360208201111561061857600080fd5b803590602001918460018302840111600160201b8311171561063957600080fd5b509092509050611021565b34801561065057600080fd5b506103eb61116c565b34801561066557600080fd5b506103eb6004803603602081101561067c57600080fd5b50356001600160a01b0316611171565b34801561069857600080fd5b506103eb61118c565b3480156106ad57600080fd5b506106d1600480360360408110156106c457600080fd5b5080359060200135611191565b604080516001600160a01b039092168252519081900360200190f35b3480156106f957600080fd5b506102c16004803603604081101561071057600080fd5b50803590602001356001600160a01b03166111b6565b34801561073257600080fd5b506102136111d4565b34801561074757600080fd5b506104dc6004803603602081101561075e57600080fd5b5035611235565b34801561077157600080fd5b506103eb611275565b34801561078657600080fd5b506103eb61127a565b34801561079b57600080fd5b506102c1600480360360408110156107b257600080fd5b506001600160a01b0381351690602001356112a0565b3480156107d457600080fd5b506102c1600480360360408110156107eb57600080fd5b506001600160a01b03813516906020013561130e565b34801561080d57600080fd5b506103eb6004803603602081101561082457600080fd5b5035611322565b34801561083757600080fd5b506104dc6004803603604081101561084e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561087857600080fd5b82018360208201111561088a57600080fd5b803590602001918460018302840111600160201b831117156108ab57600080fd5b509092509050611339565b3480156108c257600080fd5b506104dc600480360360408110156108d957600080fd5b50803590602001356001600160a01b03166113f6565b3480156108fb57600080fd5b506103eb6004803603604081101561091257600080fd5b506001600160a01b038135811691602001351661144f565b34801561093657600080fd5b506104dc6004803603608081101561094d57600080fd5b810190602081018135600160201b81111561096757600080fd5b82018360208201111561097957600080fd5b803590602001918460018302840111600160201b8311171561099a57600080fd5b919390929091602081019035600160201b8111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460018302840111600160201b831117156109ea57600080fd5b9193509150803560ff1690602001356001600160a01b031661147a565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050505090505b90565b6000610ab2610aab611637565b8484611646565b5060015b92915050565b604051806040016040528060018152602001608960f81b81525081565b6060610ae361226f565b50604080516060810182526001600160a01b0388166000818152600a602090815290849020548352820152908101869052610b218782878787611732565b610b5c5760405162461bcd60e51b815260040180806020018281038252602181526020018061251f6021913960400191505060405180910390fd5b6001600160a01b0387166000908152600a6020526040902054610b8690600163ffffffff61180f16565b6001600160a01b0388166000818152600a602090815260408083209490945583519283523383820181905260609484018581528b51958501959095528a517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b958d9592948d94919260808501928601918190849084905b83811015610c15578181015183820152602001610bfd565b50505050905090810190601f168015610c425780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160006060306001600160a01b0316888a6040516020018083805190602001908083835b60208310610c935780518252601f199092019160209182019101610c74565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610d125780518252601f199092019160209182019101610cf3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d74576040519150601f19603f3d011682016040523d82523d6000602084013e610d79565b606091505b509150915081610dd0576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b98975050505050505050565b604051806040016040528060018152602001600160f81b81525081565b604051806040016040528060018152602001603160f81b81525081565b60025490565b60095490565b6000610e2f848484611869565b610ea584610e3b611637565b610ea0856040518060600160405280602881526020016124f7602891396001600160a01b038a16600090815260016020526040812090610e79611637565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6119d016565b611646565b5060019392505050565b60009081526006602052604090206002015490565b6001600160a01b03166000908152600a602052604090205490565b610ef0610eea611637565b82611a67565b50565b600082815260066020526040902060020154610f1690610f11611637565b6111b6565b610f515760405162461bcd60e51b815260040180806020018281038252602f815260200180612377602f913960400191505060405180910390fd5b610f5b8282611b6f565b5050565b60055460ff1690565b4690565b610f74611637565b6001600160a01b0316816001600160a01b031614610fc35760405162461bcd60e51b815260040180806020018281038252602f8152602001806125cf602f913960400191505060405180910390fd5b610f5b8282611bde565b6000610ab2610fda611637565b84610ea08560016000610feb611637565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61180f16565b600061102f81610f11611637565b6007906110cf5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156110c05780601f10611095576101008083540402835291602001916110c0565b820191906000526020600020905b8154815290600101906020018083116110a357829003601f168201915b50509250505060405180910390fd5b5061110f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4d92505050565b61116783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b60208201529150611c609050565b505050565b608981565b6001600160a01b031660009081526020819052604090205490565b600181565b60008281526006602052604081206111af908363ffffffff611ceb16565b9392505050565b60008281526006602052604081206111af908363ffffffff611cf716565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b6000811161124257600080fd5b336000908152600b6020526040902054611262908263ffffffff61180f16565b336000908152600b602052604090205550565b600081565b604080516d4445504f5349544f525f524f4c4560901b8152905190819003600e01902081565b6000610ab26112ad611637565b84610ea0856040518060600160405280602581526020016125aa60259139600160006112d7611637565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6119d016565b6000610ab261131b611637565b8484611869565b6000818152600660205260408120610ab690611d0c565b604080516d4445504f5349544f525f524f4c4560901b8152905190819003600e01902061136881610f11611637565b6007906113ce5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156110c05780601f10611095576101008083540402835291602001916110c0565b506000838360208110156113e157600080fd5b503590506113ef8582611d17565b5050505050565b60008281526006602052604090206002015461141490610f11611637565b610fc35760405162461bcd60e51b81526004018080602001828103825260308152602001806124a26030913960400191505060405180910390fd5b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60085460ff16156114c3576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b61150286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4d92505050565b61154184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e1392505050565b61154a82611e26565b61158b848460405160200180806410da1a5b1960da1b8152506005018383808284378083019250505092505050604051602081830303815290604052611e3c565b61159d6000611598611637565b610f51565b604080516d4445504f5349544f525f524f4c4560901b8152905190819003600e0190206115ca9082610f51565b61162286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260018152603160f81b60208201529150611eda9050565b50506008805460ff1916600117905550505050565b6000611641611f3e565b905090565b6001600160a01b03831661168b5760405162461bcd60e51b81526004018080602001828103825260248152602001806125866024913960400191505060405180910390fd5b6001600160a01b0382166116d05760405162461bcd60e51b815260040180806020018281038252602281526020018061240b6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60006001600160a01b0386166117795760405162461bcd60e51b81526004018080602001828103825260258152602001806124d26025913960400191505060405180910390fd5b600161178c61178787611f9b565b612027565b83868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156117e6573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b6000828201838110156111af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166118ae5760405162461bcd60e51b81526004018080602001828103825260258152602001806125616025913960400191505060405180910390fd5b6001600160a01b0382166118f35760405162461bcd60e51b81526004018080602001828103825260238152602001806123546023913960400191505060405180910390fd5b6118fe838383611167565b6119418160405180606001604052806026815260200161247c602691396001600160a01b038616600090815260208190526040902054919063ffffffff6119d016565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611976908263ffffffff61180f16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a5f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a24578181015183820152602001611a0c565b50505050905090810190601f168015611a515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216611aac5760405162461bcd60e51b81526004018080602001828103825260218152602001806125406021913960400191505060405180910390fd5b611ab882600083611167565b611afb816040518060600160405280602281526020016123a6602291396001600160a01b038516600090815260208190526040902054919063ffffffff6119d016565b6001600160a01b038316600090815260208190526040902055600254611b27908263ffffffff61207316565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828152600660205260409020611b8d908263ffffffff6120b516565b15610f5b57611b9a611637565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152600660205260409020611bfc908263ffffffff6120ca16565b15610f5b57611c09611637565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b8051610f5b906003906020840190612299565b6040518060800160405280604f815260200161242d604f9139805190602001208280519060200120828051906020012030611c99610f68565b604080516020808201979097528082019590955260608501939093526001600160a01b03909116608084015260a0808401919091528151808403909101815260c0909201905280519101206009555050565b60006111af83836120df565b60006111af836001600160a01b038416612143565b6000610ab68261215b565b6001600160a01b038216611d72576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611d7e60008383611167565b600254611d91908263ffffffff61180f16565b6002556001600160a01b038216600090815260208190526040902054611dbd908263ffffffff61180f16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b8051610f5b906004906020840190612299565b6005805460ff191660ff92909216919091179055565b806040516020018082805190602001908083835b60208310611e6f5780518252601f199092019160209182019101611e50565b51815160209384036101000a60001901801990921691161790527f3a20494e53554646494349454e545f5045524d495353494f4e530000000000009190930190815260408051808303600519018152601a90920190528051610f5b9550600794509201919050612299565b60085460ff1615611f23576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b611f2d8282611c60565b50506008805460ff19166001179055565b600033301415611f965760606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150610a9b9050565b503390565b60006040518060800160405280604381526020016123c860439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612031610e1c565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60006111af83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119d0565b60006111af836001600160a01b03841661215f565b60006111af836001600160a01b0384166121a9565b815460009082106121215760405162461bcd60e51b81526004018080602001828103825260228152602001806123326022913960400191505060405180910390fd5b82600001828154811061213057fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600061216b8383612143565b6121a157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ab6565b506000610ab6565b6000818152600183016020526040812054801561226557835460001980830191908101906000908790839081106121dc57fe5b90600052602060002001549050808760000184815481106121f957fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061222957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ab6565b6000915050610ab6565b60405180606001604052806000815260200160006001600160a01b03168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106122da57805160ff1916838001178555612307565b82800160010185558215612307579182015b828111156123075782518255916020019190600101906122ec565b50612313929150612317565b5090565b610a9b91905b80821115612313576000815560010161231d56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e63654d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652945524332303a20617070726f766520746f20746865207a65726f2061646472657373454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c742945524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5349474e455245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655369676e657220616e64207369676e617475726520646f206e6f74206d6174636845524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220508eddc4084448273bc1d62a9b83bd8795dfe7f907035a525ef77a83b8893bc864736f6c63430006060033