60806040526108ae600d556106d7600e556006600f5566b1a2bc2ec500006010553480156200002c575f80fd5b506daaeb6d7670e522a718067333cd4e733cc6cdda760b79bafa08df41ecfa224f810dceb660018282826040518060400160405280601181526020017047616e677a204f66204e657720596f726b60781b81525060405180604001604052806004815260200163474f4e5960e01b8152508160029081620000ae9190620004d5565b506003620000bd8282620004d5565b505060015f5550620000cf3362000247565b600b80546001600160a01b0319166001600160a01b03851690811790915583903b15620001fe5781156200016257604051633e9f1edf60e11b81523060048201526001600160a01b038481166024830152821690637d3e3dbe906044015b5f604051808303815f87803b15801562000145575f80fd5b505af115801562000158573d5f803e3d5ffd5b50505050620001fe565b6001600160a01b03831615620001a75760405163a0af290360e01b81523060048201526001600160a01b03848116602483015282169063a0af2903906044016200012d565b604051632210724360e11b81523060048201526001600160a01b03821690634420e486906024015f604051808303815f87803b158015620001e6575f80fd5b505af1158015620001f9573d5f803e3d5ffd5b505050505b5050506001600160a01b03841690506200022b5760405163c49d17ad60e01b815260040160405180910390fd5b50506001600c555062000241336103e862000298565b6200059d565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b620002a2620002b2565b620002ae82826200031b565b5050565b33620002bd6200041c565b6001600160a01b031614620003195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6127106001600160601b03821611156200038b5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840162000310565b6001600160a01b038216620003e35760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000310565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600855565b5f62000430600a546001600160a01b031690565b905090565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200045e57607f821691505b6020821081036200047d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004d0575f81815260208120601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000435565b620005098162000502845462000449565b8462000483565b602080601f8311600181146200053f575f8415620005275750858301515b5f19600386901b1c1916600185901b178555620004cc565b5f85815260208120601f198616915b828110156200056f578886015182559484019460019091019084016200054e565b50858210156200058d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b61230c80620005ab5f395ff3fe608060405260043610610275575f3560e01c806370a082311161014a578063aa1b103f116100be578063c87b56dd11610078578063c87b56dd14610722578063d123973014610741578063d5abeb011461075a578063e985e9c51461076f578063ecba222a1461078e578063f2fde38b146107ae575f80fd5b8063aa1b103f14610673578063add5a4fa14610687578063b0ccc31e146106a6578063b88d4fde146106c5578063b8d1e532146106e4578063bbaac02f14610703575f80fd5b806391b7f5ed1161010f57806391b7f5ed146105e457806395d89b4114610603578063a035b1fe14610617578063a0712d681461062c578063a22cb4651461063f578063a4d66daf1461065e575f80fd5b806370a0823114610575578063715018a6146105945780637d55094d146105a85780638cc54e7f146105bc5780638da5cb5b146105d0575f80fd5b80632d0a913e116101ec5780635e84d723116101a65780635e84d723146104c65780635ef9432a146104db5780636352211e146104ef57806363b266ba1461050e5780636c0360eb146105425780636f8b44b014610556575f80fd5b80632d0a913e146104235780633ccfd60b1461044257806342842e0e14610456578063518302271461047557806355f804b3146104935780635bc020bc146104b2575f80fd5b80631650e64e1161023d5780631650e64e1461034557806318160ddd1461036457806323b872dd1461038857806326aa420a146103a757806327ea6f2b146103c65780632a55205a146103e5575f80fd5b806301ffc9a71461027957806304634d8d146102ad57806306fdde03146102ce578063081812fc146102ef578063095ea7b314610326575b5f80fd5b348015610284575f80fd5b50610298610293366004611bde565b6107cd565b60405190151581526020015b60405180910390f35b3480156102b8575f80fd5b506102cc6102c7366004611c14565b6107ec565b005b3480156102d9575f80fd5b506102e2610802565b6040516102a49190611ca1565b3480156102fa575f80fd5b5061030e610309366004611cb3565b610892565b6040516001600160a01b0390911681526020016102a4565b348015610331575f80fd5b506102cc610340366004611cca565b6108d4565b348015610350575f80fd5b506102cc61035f366004611d37565b6109a4565b34801561036f575f80fd5b506001545f54035f19015b6040519081526020016102a4565b348015610393575f80fd5b506102cc6103a2366004611ddf565b610a10565b3480156103b2575f80fd5b506102cc6103c1366004611cb3565b610a20565b3480156103d1575f80fd5b506102cc6103e0366004611cb3565b610a2d565b3480156103f0575f80fd5b506104046103ff366004611e18565b610a3a565b604080516001600160a01b0390931683526020830191909152016102a4565b34801561042e575f80fd5b506102cc61043d366004611d37565b610ae4565b34801561044d575f80fd5b506102cc610b51565b348015610461575f80fd5b506102cc610470366004611ddf565b610c1c565b348015610480575f80fd5b5060115461029890610100900460ff1681565b34801561049e575f80fd5b506102cc6104ad366004611e38565b610c36565b3480156104bd575f80fd5b506102cc610c4b565b3480156104d1575f80fd5b5061037a600e5481565b3480156104e6575f80fd5b506102cc610c70565b3480156104fa575f80fd5b5061030e610509366004611cb3565b610d14565b348015610519575f80fd5b5061037a610528366004611ea4565b6001600160a01b03165f9081526015602052604090205490565b34801561054d575f80fd5b506102e2610d1e565b348015610561575f80fd5b506102cc610570366004611cb3565b610daa565b348015610580575f80fd5b5061037a61058f366004611ea4565b610db7565b34801561059f575f80fd5b506102cc610dfd565b3480156105b3575f80fd5b506102cc610e10565b3480156105c7575f80fd5b506102e2610e2c565b3480156105db575f80fd5b5061030e610e39565b3480156105ef575f80fd5b506102cc6105fe366004611cb3565b610e51565b34801561060e575f80fd5b506102e2610e5e565b348015610622575f80fd5b5061037a60105481565b6102cc61063a366004611cb3565b610e6d565b34801561064a575f80fd5b506102cc610659366004611ebd565b61105a565b348015610669575f80fd5b5061037a600f5481565b34801561067e575f80fd5b506102cc6110ee565b348015610692575f80fd5b506102cc6106a1366004611cca565b6110ff565b3480156106b1575f80fd5b50600b5461030e906001600160a01b031681565b3480156106d0575f80fd5b506102cc6106df366004611eeb565b61118a565b3480156106ef575f80fd5b506102cc6106fe366004611ea4565b6111d4565b34801561070e575f80fd5b506102cc61071d366004611e38565b61128c565b34801561072d575f80fd5b506102e261073c366004611cb3565b6112a1565b34801561074c575f80fd5b506011546102989060ff1681565b348015610765575f80fd5b5061037a600d5481565b34801561077a575f80fd5b50610298610789366004611fa4565b6113e8565b348015610799575f80fd5b50600b5461029890600160a01b900460ff1681565b3480156107b9575f80fd5b506102cc6107c8366004611ea4565b611415565b5f6107d78261148e565b806107e657506107e6826114db565b92915050565b6107f461150f565b6107fe828261156e565b5050565b60606002805461081190611fd5565b80601f016020809104026020016040519081016040528092919081815260200182805461083d90611fd5565b80156108885780601f1061085f57610100808354040283529160200191610888565b820191905f5260205f20905b81548152906001019060200180831161086b57829003601f168201915b5050505050905090565b5f61089c8261166b565b6108b9576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f6108de8261169d565b9050806001600160a01b0316836001600160a01b0316036109125760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146109495761092c81336113e8565b610949576040516367d9dca160e11b815260040160405180910390fd5b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109ac61150f565b5f5b81518110156107fe575f60145f8484815181106109cd576109cd61200d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610a0881612035565b9150506109ae565b610a1b83838361170d565b505050565b610a2861150f565b600e55565b610a3561150f565b600f55565b5f8281526009602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610aae5750604080518082019091526008546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101515f9061271090610acc906001600160601b03168761204d565b610ad69190612078565b915196919550909350505050565b610aec61150f565b5f5b81518110156107fe57600160145f848481518110610b0e57610b0e61200d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610b4981612035565b915050610aee565b610b5961150f565b6002600c5403610b845760405162461bcd60e51b8152600401610b7b9061208b565b60405180910390fd5b6002600c556040515f90339047908381818185875af1925050503d805f8114610bc8576040519150601f19603f3d011682016040523d82523d5f602084013e610bcd565b606091505b5050905080610c145760405162461bcd60e51b815260206004820152601360248201527215da5d1a191c985dc8115d1a0811985a5b1959606a1b6044820152606401610b7b565b506001600c55565b610a1b83838360405180602001604052805f81525061118a565b610c3e61150f565b6013610a1b828483612107565b610c5361150f565b6011805461ff001981166101009182900460ff1615909102179055565b610c78610e39565b6001600160a01b0316336001600160a01b031614610ca957604051635fc483c560e01b815260040160405180910390fd5b600b54600160a01b900460ff1615610cd457604051631551a48f60e11b815260040160405180910390fd5b600b80546001600160a81b031916600160a01b1790556040517f51e2d870cc2e10853e38dc06fcdae46ad3c3f588f326608803dac6204541ad16905f90a1565b5f6107e68261169d565b60138054610d2b90611fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5790611fd5565b8015610da25780601f10610d7957610100808354040283529160200191610da2565b820191905f5260205f20905b815481529060010190602001808311610d8557829003601f168201915b505050505081565b610db261150f565b600d55565b5f815f03610dd8576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03165f9081526005602052604090205467ffffffffffffffff1690565b610e0561150f565b610e0e5f6118be565b565b610e1861150f565b6011805460ff19811660ff90911615179055565b60128054610d2b90611fd5565b5f610e4c600a546001600160a01b031690565b905090565b610e5961150f565b601055565b60606003805461081190611fd5565b6002600c5403610e8f5760405162461bcd60e51b8152600401610b7b9061208b565b6002600c556010545f90610ea3908361204d565b60115490915060ff16610ee85760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d08111a5cd8589b1959609a1b6044820152606401610b7b565b335f9081526014602052604090205460ff16610f385760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610b7b565b600e546001545f54849190035f1901610f5191906121c3565b1115610f8a5760405162461bcd60e51b815260206004820152600860248201526714dbdb190813dd5d60c21b6044820152606401610b7b565b600f54335f90815260156020526040902054610fa79084906121c3565b1115610fe05760405162461bcd60e51b8152602060048201526008602482015267546f6f204d616e7960c01b6044820152606401610b7b565b803410156110235760405162461bcd60e51b815260206004820152601060248201526f2737ba1022b737bab3b41022ba3432b960811b6044820152606401610b7b565b335f90815260156020526040812080548492906110419084906121c3565b909155506110519050338361190f565b50506001600c55565b336001600160a01b038316036110835760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6110f661150f565b610e0e5f600855565b61110761150f565b6002600c54036111295760405162461bcd60e51b8152600401610b7b9061208b565b6002600c55600d546001545f54839190035f190161114791906121c3565b11156111805760405162461bcd60e51b815260206004820152600860248201526714dbdb190813dd5d60c21b6044820152606401610b7b565b611051828261190f565b61119584848461170d565b6001600160a01b0383163b156111ce576111b1848484846119e4565b6111ce576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6111dc610e39565b6001600160a01b0316336001600160a01b03161461120d57604051635fc483c560e01b815260040160405180910390fd5b600b54600160a01b900460ff161561123857604051631551a48f60e11b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9f513fe86dc42fdbac355fa4d9b1d5be7b5e6cd2df67e30db8003766568de4769060200160405180910390a150565b61129461150f565b6012610a1b828483612107565b60606112ac8261166b565b6112ee5760405162461bcd60e51b815260206004820152601360248201527211d3d39648111bd95cc8139bdd08115e1a5cdd606a1b6044820152606401610b7b565b601154610100900460ff1615611358576013805461130b90611fd5565b90505f036113275760405180602001604052805f8152506107e6565b601361133283611acc565b6040516020016113439291906121d6565b60405160208183030381529060405292915050565b6012805461136590611fd5565b80601f016020809104026020016040519081016040528092919081815260200182805461139190611fd5565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b50505050509050919050565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b61141d61150f565b6001600160a01b0381166114825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7b565b61148b816118be565b50565b5f6301ffc9a760e01b6001600160e01b0319831614806114be57506380ac58cd60e01b6001600160e01b03198316145b806107e65750506001600160e01b031916635b5e139f60e01b1490565b5f6001600160e01b0319821663152a902d60e11b14806107e657506301ffc9a760e01b6001600160e01b03198316146107e6565b33611518610e39565b6001600160a01b031614610e0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b7b565b6127106001600160601b03821611156115dc5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610b7b565b6001600160a01b0382166116325760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b7b565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600855565b5f8160011115801561167d57505f5482105b80156107e65750505f90815260046020526040902054600160e01b161590565b5f81806001116116f4575f548110156116f4575f8181526004602052604081205490600160e01b821690036116f2575b805f036116eb57505f19015f818152600460205260409020546116cd565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b5f6117178261169d565b9050836001600160a01b0316816001600160a01b03161461174a5760405162a1148160e81b815260040160405180910390fd5b5f828152600660205260408120546001600160a01b0390811691908616331480611779575061177986336113e8565b8061178c57506001600160a01b03821633145b9050806117ac57604051632ce44b5f60e11b815260040160405180910390fd5b845f036117cc57604051633a954ecd60e21b815260040160405180910390fd5b81156117ee575f84815260066020526040902080546001600160a01b03191690555b6001600160a01b038681165f90815260056020908152604080832080545f1901905592881682528282208054600101905586825260049052908120600160e11b4260a01b881781179091558416900361187457600184015f818152600460205260408120549003611872575f548114611872575f8181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54825f0361193057604051622e076360e81b815260040160405180910390fd5b815f036119505760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526005602090815260408083208054680100000000000000018702019055838352600490915290204260a01b84176001841460e11b179055808083015b6040516001830192906001600160a01b038716905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821061199a57505f55505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a0290611a18903390899088908890600401612259565b6020604051808303815f875af1925050508015611a52575060408051601f3d908101601f19168201909252611a4f91810190612295565b60015b611aae573d808015611a7f576040519150601f19603f3d011682016040523d82523d5f602084013e611a84565b606091505b5080515f03611aa6576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060815f03611af25750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611b1b5780611b0581612035565b9150611b149050600a83612078565b9150611af5565b5f8167ffffffffffffffff811115611b3557611b35611cf2565b6040519080825280601f01601f191660200182016040528015611b5f576020820181803683370190505b5090505b8415611ac457611b746001836122b0565b9150611b81600a866122c3565b611b8c9060306121c3565b60f81b818381518110611ba157611ba161200d565b60200101906001600160f81b03191690815f1a905350611bc2600a86612078565b9450611b63565b6001600160e01b03198116811461148b575f80fd5b5f60208284031215611bee575f80fd5b81356116eb81611bc9565b80356001600160a01b0381168114611c0f575f80fd5b919050565b5f8060408385031215611c25575f80fd5b611c2e83611bf9565b915060208301356001600160601b0381168114611c49575f80fd5b809150509250929050565b5f5b83811015611c6e578181015183820152602001611c56565b50505f910152565b5f8151808452611c8d816020860160208601611c54565b601f01601f19169290920160200192915050565b602081525f6116eb6020830184611c76565b5f60208284031215611cc3575f80fd5b5035919050565b5f8060408385031215611cdb575f80fd5b611ce483611bf9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d2f57611d2f611cf2565b604052919050565b5f6020808385031215611d48575f80fd5b823567ffffffffffffffff80821115611d5f575f80fd5b818501915085601f830112611d72575f80fd5b813581811115611d8457611d84611cf2565b8060051b9150611d95848301611d06565b8181529183018401918481019088841115611dae575f80fd5b938501935b83851015611dd357611dc485611bf9565b82529385019390850190611db3565b98975050505050505050565b5f805f60608486031215611df1575f80fd5b611dfa84611bf9565b9250611e0860208501611bf9565b9150604084013590509250925092565b5f8060408385031215611e29575f80fd5b50508035926020909101359150565b5f8060208385031215611e49575f80fd5b823567ffffffffffffffff80821115611e60575f80fd5b818501915085601f830112611e73575f80fd5b813581811115611e81575f80fd5b866020828501011115611e92575f80fd5b60209290920196919550909350505050565b5f60208284031215611eb4575f80fd5b6116eb82611bf9565b5f8060408385031215611ece575f80fd5b611ed783611bf9565b915060208301358015158114611c49575f80fd5b5f805f8060808587031215611efe575f80fd5b611f0785611bf9565b93506020611f16818701611bf9565b935060408601359250606086013567ffffffffffffffff80821115611f39575f80fd5b818801915088601f830112611f4c575f80fd5b813581811115611f5e57611f5e611cf2565b611f70601f8201601f19168501611d06565b91508082528984828501011115611f85575f80fd5b80848401858401375f8482840101525080935050505092959194509250565b5f8060408385031215611fb5575f80fd5b611fbe83611bf9565b9150611fcc60208401611bf9565b90509250929050565b600181811c90821680611fe957607f821691505b60208210810361200757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161204657612046612021565b5060010190565b80820281158282048414176107e6576107e6612021565b634e487b7160e01b5f52601260045260245ffd5b5f8261208657612086612064565b500490565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b601f821115610a1b575f81815260208120601f850160051c810160208610156120e85750805b601f850160051c820191505b818110156118b6578281556001016120f4565b67ffffffffffffffff83111561211f5761211f611cf2565b6121338361212d8354611fd5565b836120c2565b5f601f841160018114612164575f851561214d5750838201355b5f19600387901b1c1916600186901b1783556121bc565b5f83815260209020601f19861690835b828110156121945786850135825560209485019460019092019101612174565b50868210156121b0575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b808201808211156107e6576107e6612021565b5f8084546121e381611fd5565b600182811680156121fb57600181146122105761223c565b60ff198416875282151583028701945061223c565b885f526020805f205f5b858110156122335781548a82015290840190820161221a565b50505082870194505b505050508351612250818360208801611c54565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061228b90830184611c76565b9695505050505050565b5f602082840312156122a5575f80fd5b81516116eb81611bc9565b818103818111156107e6576107e6612021565b5f826122d1576122d1612064565b50069056fea2646970667358221220705d1cabf4f9bc044941ac575730698c92fc61bf5df64c268f5bd895d0ac6ec264736f6c63430008140033