608060405234801562000010575f80fd5b506200001c3262000022565b6200030a565b6200002d81620000a2565b6200003a816001620000dd565b6040805180820190915260098152684e6f2048616e646c6560b81b60208201525f906200006890826200023e565b506040805180820190915260028152614e4f60f01b60208201526001906200009190826200023e565b50506003805460ff19166023179055565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6200016782620001278362000117836001600160a01b03165f90815268a20d6e21d0e525531060205260409020546001600160581b031690565b6001600160581b0316906200016b565b6001600160a01b03919091165f90815268a20d6e21d0e52553106020526040902080546001600160581b0319166001600160581b03909216919091179055565b5050565b5f8115156200017f8460571c600116151590565b15151462000199576a800000000000000000000092909218915b5090919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001c957607f821691505b602082108103620001e857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200023957805f5260205f20601f840160051c81016020851015620002155750805b601f840160051c820191505b8181101562000236575f815560010162000221565b50505b505050565b81516001600160401b038111156200025a576200025a620001a0565b62000272816200026b8454620001b4565b84620001ee565b602080601f831160018114620002a8575f8415620002905750858301515b5f19600386901b1c1916600185901b17855562000302565b5f85815260208120601f198616915b82811015620002d857888601518255948401946001909101908401620002b7565b5085821015620002f657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b61262280620003185f395ff3fe608060405260043610610212575f3560e01c80634ef41efc116101175780638da5cb5b1161009f578063c87b56dd1161006e578063c87b56dd14610973578063dd62ed3e14610992578063f04e283e146109de578063f2fde38b146109f1578063fee81cf414610a0457610219565b80638da5cb5b1461090957806395d89b4114610921578063a9059cbb14610935578063b69820691461095457610219565b806355f804b3116100e657806355f804b3146108905780635a446215146108af57806370a08231146108ce578063715018a6146108ed57806375b238fc146108f557610219565b80634ef41efc146107fb578063514e62fc1461083457806353d6fd591461086957806354d1f13d1461088857610219565b8063274e430b1161019a578063398b187e11610169578063398b187e146107965780633af32abf146107aa5780633ccfd60b1461079657806348826428146107c95780634a4ee7b1146107e857610219565b8063274e430b146107145780632a6a935d146107335780632de9480714610752578063313ce5671461078357610219565b8063183a4f6e116101e1578063183a4f6e146106925780631c10893f146106a55780631cd64df4146106b857806323b872dd146106ed578063256929621461070c57610219565b806304dfe79d146105dc57806306fdde031461060c578063095ea7b31461062d57806318160ddd1461065c57610219565b3661021957005b68a20d6e21d0e52553085f3560e01c63e985e9c58190036102bb5760018201546001600160a01b031633146102615760405163ce5a776b60e01b815260040160405180910390fd5b604436101561026e575f80fd5b6004356001600160a01b038181165f908152600385016020908152604080832060243594851684529091529020546102b89060ff166102ad575f6102b0565b60015b60ff16610a35565b50505b80636352211e0361031f5760018201546001600160a01b031633146102f35760405163ce5a776b60e01b815260040160405180910390fd5b6024361015610300575f80fd5b60043561031d61030f82610a3d565b6001600160a01b0316610a35565b505b8063e5eb36c80361038b5760018201546001600160a01b031633146103575760405163ce5a776b60e01b815260040160405180910390fd5b6084361015610364575f80fd5b60043560243560443560643561037c84848484610a73565b6103866001610a35565b505050505b8063813500fc036104235760018201546001600160a01b031633146103c35760405163ce5a776b60e01b815260040160405180910390fd5b60643610156103d0575f80fd5b6001600160a01b036044358181165f90815268a20d6e21d0e525530b6020908152604080832060043595861684529091529020805460ff191660243515159081179091559061041f6001610a35565b5050505b8063d10b6e0c036104835760018201546001600160a01b0316331461045b5760405163ce5a776b60e01b815260040160405180910390fd5b6064361015610468575f80fd5b60043560243560443561047f61030f848484610a8f565b5050505b8063081812fc036104d95760018201546001600160a01b031633146104bb5760405163ce5a776b60e01b815260040160405180910390fd5b60243610156104c8575f80fd5b6004356104d761030f82610b82565b505b8063f5b100ea0361055f5760018201546001600160a01b031633146105115760405163ce5a776b60e01b815260040160405180910390fd5b602436101561051e575f80fd5b60043561055d610558826001600160a01b03165f90815268a20d6e21d0e5255310602052604090205463ffffffff600160801b9091041690565b610a35565b505b8063e2c79281036105c55760018201546001600160a01b031633146105975760405163ce5a776b60e01b815260040160405180910390fd5b60043610156105a4575f80fd5b68a20d6e21d0e5255308546105c590600160401b900463ffffffff16610a35565b8063b7a94eb8036105da576105da6001610a35565b005b3480156105e7575f80fd5b506003546105f59060ff1681565b60405160ff90911681526020015b60405180910390f35b348015610617575f80fd5b50610620610bcc565b60405161060391906121a8565b348015610638575f80fd5b5061064c61064736600461220a565b610c5b565b6040519015158152602001610603565b348015610667575f80fd5b5068a20d6e21d0e525530854600160601b90046001600160601b03165b604051908152602001610603565b6105da6106a0366004612232565b610ccf565b6105da6106b336600461220a565b610cdc565b3480156106c3575f80fd5b5061064c6106d236600461220a565b638b78c6d8600c9081525f9290925260209091205481161490565b3480156106f8575f80fd5b5061064c610707366004612249565b610cf2565b6105da610d92565b34801561071f575f80fd5b5061064c61072e366004612282565b610ddf565b34801561073e575f80fd5b506105da61074d3660046122aa565b610e2d565b34801561075d575f80fd5b5061068461076c366004612282565b638b78c6d8600c9081525f91909152602090205490565b34801561078e575f80fd5b5060126105f5565b3480156107a1575f80fd5b506105da610e37565b3480156107b5575f80fd5b5061064c6107c4366004612282565b610e4b565b3480156107d4575f80fd5b506105da6107e3366004612282565b610e63565b6105da6107f636600461220a565b610e9c565b348015610806575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b039091168152602001610603565b34801561083f575f80fd5b5061064c61084e36600461220a565b638b78c6d8600c9081525f9290925260209091205416151590565b348015610874575f80fd5b506105da6108833660046122c3565b610eae565b6105da610ec8565b34801561089b575f80fd5b506105da6108aa366004612339565b610f01565b3480156108ba575f80fd5b506105da6108c9366004612378565b610f19565b3480156108d9575f80fd5b506106846108e8366004612282565b610f46565b6105da610f78565b348015610900575f80fd5b50610684600181565b348015610914575f80fd5b50638b78c6d8195461081c565b34801561092c575f80fd5b50610620610f8b565b348015610940575f80fd5b5061064c61094f36600461220a565b610f9a565b34801561095f575f80fd5b506105da61096e3660046123df565b610faf565b34801561097e575f80fd5b5061062061098d366004612232565b610fd1565b34801561099d575f80fd5b506106846109ac3660046123ff565b6001600160a01b039182165f90815268a20d6e21d0e525530d6020908152604080832093909416825291909152205490565b6105da6109ec366004612282565b6110c9565b6105da6109ff366004612282565b611103565b348015610a0f575f80fd5b50610684610a1e366004612282565b63389a75e1600c9081525f91909152602090205490565b805f5260205ff35b5f610a4782611129565b610a645760405163677510db60e11b815260040160405180910390fd5b610a6d82611145565b92915050565b610a7f84848484611198565b610a8984846114f9565b50505050565b5f68a20d6e21d0e52553088168a20d6e21d0e525530a81610adb68a20d6e21d0e525530f600189901b5b600381901c5f90815260209290925260409091205460059190911b60e0161c90565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116915084168114610b4d576001600160a01b038082165f90815260038401602090815260408083209388168352929052205460ff16610b4d576040516367d9dca160e11b815260040160405180910390fd5b5f8581526004909201602052604090912080546001600160a01b0387166001600160a01b031990911617905590509392505050565b5f610b8c82611129565b610ba95760405163677510db60e11b815260040160405180910390fd5b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f8054610bda90612427565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690612427565b8015610c515780601f10610c2857610100808354040283529160200191610c51565b820191905f5260205f20905b815481529060010190602001808311610c3457829003601f168201915b5050505050905090565b5f8068a20d6e21d0e5255308335f81815260058301602090815260408083206001600160a01b038a16808552908352928190208890555187815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b610cd9338261159d565b50565b610ce46115a8565b610cee82826115c2565b5050565b6001600160a01b0383165f90815268a20d6e21d0e525530d6020908152604080832033845290915281205468a20d6e21d0e5255308905f198114610d7b5780841115610d51576040516313be252b60e01b815260040160405180910390fd5b6001600160a01b0386165f9081526005830160209081526040808320338452909152902084820390555b610d868686866115ce565b50600195945050505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054600160581b90046001168203610e1a57823b5b9392505050565b54600160581b9004600216151592915050565b610cd933826115e3565b6001610e4281611672565b610cd9336116a3565b5f610a6d610e58836116bc565b60571c600116151590565b6001610e6e81611672565b5f610e83670de0b6b3a764000061271061246d565b905033610e918282866116eb565b610a89816001611880565b610ea46115a8565b610cee828261159d565b6001610eb981611672565b610ec38383611880565b505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b6001610f0c81611672565b6002610a898385836124dc565b6001610f2481611672565b5f610f308587836124dc565b506001610f3e8385836124dc565b505050505050565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902054600160a01b90046001600160601b031690565b610f806115a8565b610f895f6118ec565b565b606060018054610bda90612427565b5f610fa63384846115ce565b50600192915050565b6001610fba81611672565b506003805460ff191660ff92909216919091179055565b6060610fdc82611129565b610ff95760405163677510db60e11b815260040160405180910390fd5b6002805461100690612427565b1590506110c457610a6d6002805461101d90612427565b80601f016020809104026020016040519081016040528092919081815260200182805461104990612427565b80156110945780601f1061106b57610100808354040283529160200191611094565b820191905f5260205f20905b81548152906001019060200180831161107757829003601f168201915b5050505050604051806040016040528060048152602001637b69647d60e01b8152506110bf85611929565b61196b565b919050565b6110d16115a8565b63389a75e1600c52805f526020600c2080544211156110f757636f5e88185f526004601cfd5b5f9055610cd9816118ec565b61110b6115a8565b8060601b61112057637448fbae5f526004601cfd5b610cd9816118ec565b5f8061113483611145565b6001600160a01b0316141592915050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a8261117268a20d6e21d0e525530f600187901b610ab9565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b68a20d6e21d0e52553086001600160a01b0384166111c957604051633a954ecd60e21b815260040160405180910390fd5b5f816002015f6111e084600701610ab98860011b90565b63ffffffff16815260208101919091526040015f20546001600160a01b039081169150861681146112235760405162a1148160e81b815260040160405180910390fd5b856001600160a01b0316836001600160a01b0316146112a5576001600160a01b038087165f90815260038401602090815260408083209387168352929052205460ff166112a5575f8481526004830160205260409020546001600160a01b038481169116146112a557604051632ce44b5f60e11b815260040160405180910390fd5b5f6112af87611a8b565b90505f6112bb87611a8b565b8254909150670de0b6b3a76400009083906014906112ea908490600160a01b90046001600160601b0316612596565b82546101009290920a6001600160601b0381810219909316918316021790915582546001600160a01b038116670de0b6b3a7640000600160a01b92839004841601909216021782555061134e60078501600188901b611349848b611af6565b611b96565b5f868152600485016020908152604080832080546001600160a01b03191690556001600160a01b038b168352600687018252808320855463ffffffff60801b198116600160801b9182900463ffffffff9081165f1901908116909202178755631fffffff600382901c168552925282205460059190911b60e0161c6001600160a01b038a165f908152600687016020526040902063ffffffff91909116915061140f906114036007880160018b811b01610ab9565b63ffffffff1683611b96565b8154600163ffffffff600160801b80840482169283019091160263ffffffff60801b199092169190911783556114616007870161144f84600190811b0190565b61134960078a0160018d811b01610ab9565b6001600160a01b0389165f908152600687016020526040902061148590828a611b96565b6114986007870160018a811b0183611b96565b5050866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516114e791815260200190565b60405180910390a35050505050505050565b60035460ff165f81900361150c57505050565b80670de0b6b3a76400000261152083610f46565b1161152a57505050565b611536610e58836116bc565b1561154057505050565b638b78c6d819546001600160a01b0316836001600160a01b03160361156457505050565b638b78c6d8600c9081525f84905260209020546001161561158457505050565b6040516303cab2ff60e21b815260040160405180910390fd5b610cee82825f611bc8565b638b78c6d819543314610f89576382b429005f526004601cfd5b610cee82826001611bc8565b6115d9838383611c1f565b610ec383836114f9565b5f6115ed83611a8b565b8054909150600160581b900460021615158215151461162857805460ff600160581b80830482166002189091160260ff60581b199091161781555b826001600160a01b03167fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039383604051611665911515815260200190565b60405180910390a2505050565b638b78c6d819543314610cd957638b78c6d8600c52335f52806020600c205416610cd9576382b429005f526004601cfd5b5f385f3847855af1610cd95763b12d13eb5f526004601cfd5b6001600160a01b03165f90815268a20d6e21d0e525531060205260409020546affffffffffffffffffffff1690565b68a20d6e21d0e52553088054640100000000900463ffffffff161561172357604051633ab534b960e21b815260040160405180910390fd5b6001600160a01b03821661174a576040516339a84a7b60e01b815260040160405180910390fd5b611753826120db565b805467ffffffff0000000019166401000000001781556001810180546001600160a01b0384166001600160a01b03199091161790558315610a89576001600160a01b0383166117b557604051633a954ecd60e21b815260040160405180910390fd5b6b0de0b6b39983494c589bffff8411156117e25760405163e5cfe95760e01b815260040160405180910390fd5b80546bffffffffffffffffffffffff60601b1916600160601b6001600160601b038616021781555f61181384611a8b565b80546001600160a01b03908116600160a01b6001600160601b038916021782556040518781529192508516905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36118798460016115e3565b5050505050565b610cee826118a483611891866116bc565b6affffffffffffffffffffff1690612108565b6001600160a01b03919091165f90815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166affffffffffffffffffffff909216919091179055565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a900480611942575050819003601f19909101908152919050565b60608351835183516020870196506020860195506020850194506020604051019350828701838311611a3b576001838203015f602085106119ab57508388205b601f851660200360031b89515b8b51818118831c611a225783156119f25783888e20146119f257808a5260019c8d019c90990198848d106119ec5750611a36565b506119b8565b5f5b8b8101518b8201526020018781106119f457509b87019b988601988715611a2257848d106119ec5750611a36565b895260019b8c019b90980197838c106119b8575b505050505b84935060206040510194508781038585030192505b80881015611a6b578751845260209788019790930192611a50565b50505f818401908152602001604052601f19909201918252509392505050565b6001600160a01b0381165f90815268a20d6e21d0e5255310602052604081208054909168a20d6e21d0e525530891600160581b90046001169003611af0576001833b15611ad6576002175b825460ff909116600160581b0260ff60581b199091161782555b50919050565b8154600160601b900463ffffffff1668a20d6e21d0e52553085f829003611b8f57805481905f90611b2c9063ffffffff166125b6565b825463ffffffff8083166101009490940a848102910219909116179092558554600160601b820263ffffffff60601b199091161786555f908152600283016020526040902080546001600160a01b0386166001600160a01b031990911617905591505b5092915050565b826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b638b78c6d8600c52825f526020600c20805483811783611be9575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3505050505050565b6001600160a01b038216611c4657604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e52553085f611c5a85611a8b565b90505f611c6685611a8b565b9050611c9b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b825463ffffffff600160801b808304821660808501528454041660a08301526001600160601b03600160a01b9091041660408201819052851115611cf257604051631e9acf1760e31b815260040160405180910390fd5b6040810180518690039081905283546001600160601b03808316600160a01b9081026001600160a01b03938416178755855481810483168a01606087018190529092160291161783556080820151611d5891670de0b6b3a7640000900480821191030290565b81528154600160581b90046002165f03611dc657856001600160a01b0316876001600160a01b031603611d9357805160808201510360a08201525b611dc0670de0b6b3a7640000826060015181611db157611db16125d8565b048260a0015180821191030290565b60208201525b5f611e0d8260200151835f01510160408051808201909152606081525f60208201526040805101828152806020018360051b81016040528183528083602001525050919050565b825190915015611f02576001600160a01b0388165f908152600686016020526040902060808301518351875463ffffffff600160401b808304821684900382160263ffffffff60401b199092169190911789558754918303908116600160801b0263ffffffff60801b199092169190911787555b5f1991909101600381901c5f90815260208490526040812054919291600584901b60e0161c63ffffffff169050611ebd89600701825f8061212d565b5f81815260048a016020908152604090912080546001600160a01b0319169055858101805160089390931b60608f901b17600117835291019052808203611e81575050505b602082015115612063576001600160a01b0387165f9081526006860160209081526040822060a085015191850151909290820190611f40878c611af6565b8954602088015163ffffffff60401b19821663ffffffff600160401b80850482169093018116909202178c55895463ffffffff60801b1916600160801b86831602178a55919250670de0b6b3a7640000600160601b82046001600160601b03160491640100000000909104165b611fbe8b600701610ab98360011b90565b63ffffffff1615611fdd5760010181811115611fd8575060015b611fad565b611fe8868683611b96565b611ffd8b60070182858880600101995061212d565b612026878e835f8360200151818360081b8560601b171781526020810185602001525050505050565b60010181811115612035575060015b838503611fad578a5463ffffffff9091166401000000000267ffffffff0000000019909116178a5550505050505b805151156120845760018501546120849082906001600160a01b0316612171565b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516120ca91815260200190565b60405180910390a350505050505050565b630f4599e55f523360205260205f6024601c5f855af160015f511416610cd95763d125259c5f526004601cfd5b5f6001605784901c1615158215151461212657600160571b92909218915b5090919050565b8163ffffffff168160201b17846020528360021c5f5260405f206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b81516040810363263c69d68152602080820152815160051b604401915060208183601c84015f875af1600182511416610a89575f81fd5b5f602080835283518060208501525f5b818110156121d4578581018301518582016040015282016121b8565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146110c4575f80fd5b5f806040838503121561221b575f80fd5b612224836121f4565b946020939093013593505050565b5f60208284031215612242575f80fd5b5035919050565b5f805f6060848603121561225b575f80fd5b612264846121f4565b9250612272602085016121f4565b9150604084013590509250925092565b5f60208284031215612292575f80fd5b610e13826121f4565b803580151581146110c4575f80fd5b5f602082840312156122ba575f80fd5b610e138261229b565b5f80604083850312156122d4575f80fd5b6122dd836121f4565b91506122eb6020840161229b565b90509250929050565b5f8083601f840112612304575f80fd5b50813567ffffffffffffffff81111561231b575f80fd5b602083019150836020828501011115612332575f80fd5b9250929050565b5f806020838503121561234a575f80fd5b823567ffffffffffffffff811115612360575f80fd5b61236c858286016122f4565b90969095509350505050565b5f805f806040858703121561238b575f80fd5b843567ffffffffffffffff808211156123a2575f80fd5b6123ae888389016122f4565b909650945060208701359150808211156123c6575f80fd5b506123d3878288016122f4565b95989497509550505050565b5f602082840312156123ef575f80fd5b813560ff81168114610e13575f80fd5b5f8060408385031215612410575f80fd5b612419836121f4565b91506122eb602084016121f4565b600181811c9082168061243b57607f821691505b602082108103611af057634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6d57610a6d612459565b634e487b7160e01b5f52604160045260245ffd5b601f821115610ec357805f5260205f20601f840160051c810160208510156124bd5750805b601f840160051c820191505b81811015611879575f81556001016124c9565b67ffffffffffffffff8311156124f4576124f4612484565b612508836125028354612427565b83612498565b5f601f841160018114612539575f85156125225750838201355b5f19600387901b1c1916600186901b178355611879565b5f83815260208120601f198716915b828110156125685786850135825560209485019460019092019101612548565b5086821015612584575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160601b03828116828216039080821115611b8f57611b8f612459565b5f63ffffffff8083168181036125ce576125ce612459565b6001019392505050565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220843fe626bcd7ab88b0361ceb9436633d8d4b677879769e6fe4b4a3416f12c72a64736f6c63430008180033