60806040525f600a556018805460ff1916600117905534801562000021575f80fd5b5033806200004957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200005481620000d3565b50620000603362000122565b6200006a62000165565b506200007562000189565b6040805130815260208101829052600f818301526e455243313430305f426f6e645f563160881b606082015290517f3a6a98035de1a26956991cf36bd90804a2234807283ca016497e49d01337acfa9181900360800190a1620004b7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012f6002826200023d565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6905f90a250565b5f468162000172620002bc565b5f9283526003602052604090922082905550919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620001da5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200023a5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b62000249828262000362565b15620002985760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640162000040565b6001600160a01b03165f90815260209190915260409020805460ff19166001179055565b5f46817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620002ea620003e5565b8051602090910120620003116040805180820190915260018152603160f81b602082015290565b80516020918201206040805192830194909452928101919091526060810191909152608081018390523060a082015260c00160408051601f1981840301815291905280516020909101209392505050565b5f6001600160a01b038216620003c65760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840162000040565b506001600160a01b03165f908152602091909152604090205460ff1690565b606060078054620003f6906200047d565b80601f016020809104026020016040519081016040528092919081815260200182805462000424906200047d565b8015620004735780601f10620004495761010080835404028352916020019162000473565b820191905f5260205f20905b8154815290600101906020018083116200045557829003601f168201915b5050505050905090565b600181811c908216806200049257607f821691505b602082108103620004b157634e487b7160e01b5f52602260045260245ffd5b50919050565b614c1580620004c55f395ff3fe60806040526004361061047c575f3560e01c8063895d73861161024c578063ad1a1c5a1161013f578063c64d0ebc116100be578063e77c646d11610083578063e77c646d14610e20578063e79819c914610e3f578063ee532f3114610e56578063f2fde38b14610e75578063f698da2514610e94578063f81094f314610ea8575f80fd5b8063c64d0ebc14610d6b578063ca281fd914610d8a578063dc0eea8d14610d9e578063dd62ed3e14610dbd578063e47d606014610e01575f80fd5b8063bed34bba11610104578063bed34bba14610cd0578063c09307f414610cef578063c2e3273d14610d0e578063c5a1e97014610d2d578063c630948d14610d4c575f80fd5b8063ad1a1c5a14610c33578063b08f448114610c52578063b5bf15e514610c73578063bb3acde914610c92578063bd33810a14610cb1575f80fd5b80639675193c116101cb578063a731af6d11610190578063a731af6d14610ba3578063a8082cb014610bc2578063a8b822f414610bd6578063a9059cbb14610bf5578063aa271e1a14610c14575f80fd5b80639675193c14610b12578063983b2d5614610b325780639865027514610b515780639d2f9da114610b65578063a02619e414610b84575f80fd5b80639138ed92116102115780639138ed9214610a8c578063922a0e5114610aab578063933964c714610aca578063941c51ef14610ae957806395d89b4114610afe575f80fd5b8063895d7386146104e75780638da5cb5b14610a125780638daa6fc914610a2e5780638f78a20e14610a4e57806390547d4314610a6d575f80fd5b80633b0071aa1161036f578063696d3aad116102ee5780636f9fb98a116102b35780636f9fb98a1461096557806370a0823114610979578063715018a6146109ad57806379cc6790146109c157806382940b4c146109e057806386fe8b43146109fe575f80fd5b8063696d3aad146108bf5780636b32810b146108d35780636c30d170146108f45780636f85bfc3146109085780636f9170f614610946575f80fd5b80634f5632f8116103345780634f5632f814610815578063554098ad14610834578063556f0dc71461086b578063572c33401461087f578063665509761461089e575f80fd5b80633b0071aa1461078857806340c10f19146107a757806342966c68146107c65780634c783bf5146107e55780634d92470514610801575f80fd5b80631b9aa7f2116103fb5780632f1cae85116103c05780632f1cae85146106fc5780633092afd514610719578063313ce56714610738578063329b73531461074a578063330eb93214610769575f80fd5b80631b9aa7f2146106445780631d43e1c01461067657806323b872dd1461069f578063249cb3fa146106be5780632535f762146106dd575f80fd5b80631131d0ec116104415780631131d0ec14610579578063114f481a1461059857806315497d2c146105b757806317d7de7c146105eb57806318160ddd14610630575f80fd5b806304d820b1146104bf57806306fdde03146104e7578063095ea7b3146105085780630d1118ce146105375780630d8e6e2c14610558575f80fd5b366104bb57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f80fd5b3480156104ca575f80fd5b506104d460215481565b6040519081526020015b60405180910390f35b3480156104f2575f80fd5b506104fb610ec7565b6040516104de9190613edd565b348015610513575f80fd5b50610527610522366004613f25565b610f57565b60405190151581526020016104de565b348015610542575f80fd5b50610556610551366004613f25565b610ffc565b005b348015610563575f80fd5b5060015b60405160ff90911681526020016104de565b348015610584575f80fd5b50610527610593366004613f4d565b611038565b3480156105a3575f80fd5b506105566105b236600461407f565b611044565b3480156105c2575f80fd5b506104d46105d1366004613f4d565b6001600160a01b03165f908152601b602052604090205490565b3480156105f6575f80fd5b5060408051808201909152601781527f455243313430305f426f6e645f3137313733383434393000000000000000000060208201526104fb565b34801561063b575f80fd5b50600a546104d4565b34801561064f575f80fd5b5061066161065e3660046140cd565b90565b60405163ffffffff90911681526020016104de565b348015610681575f80fd5b506040805180820190915260018152603160f81b60208201526104fb565b3480156106aa575f80fd5b506105276106b93660046140e4565b61111d565b3480156106c9575f80fd5b506104d46106d836600461411d565b611150565b3480156106e8575f80fd5b506105566106f736600461418b565b6111ad565b348015610707575f80fd5b5060185462010000900460ff16610527565b348015610724575f80fd5b50610556610733366004613f4d565b6111fb565b348015610743575f80fd5b505f610567565b348015610755575f80fd5b506105566107643660046141e0565b61122c565b348015610774575f80fd5b506105566107833660046141fb565b611263565b348015610793575f80fd5b506105566107a23660046142d7565b61135a565b3480156107b2575f80fd5b506105566107c1366004613f25565b6114fa565b3480156107d1575f80fd5b506105566107e03660046140cd565b61153a565b3480156107f0575f80fd5b50601854610100900460ff16610527565b34801561080c575f80fd5b50610556611555565b348015610820575f80fd5b5061055661082f366004613f4d565b6117a4565b34801561083f575f80fd5b50601154610853906001600160a01b031681565b6040516001600160a01b0390911681526020016104de565b348015610876575f80fd5b506009546104d4565b34801561088a575f80fd5b50610556610899366004614394565b6117f2565b3480156108a9575f80fd5b506108b2611883565b6040516104de91906143be565b3480156108ca575f80fd5b50610556611995565b3480156108de575f80fd5b506108e7611b9d565b6040516104de919061441d565b3480156108ff575f80fd5b50610556611bae565b348015610913575f80fd5b506109276109223660046140cd565b611bec565b604080516001600160a01b0390931683526020830191909152016104de565b348015610951575f80fd5b50610527610960366004613f4d565b611c22565b348015610970575f80fd5b506104d4611c2c565b348015610984575f80fd5b506104d4610993366004613f4d565b6001600160a01b03165f9081526019602052604090205490565b3480156109b8575f80fd5b50610556611cd9565b3480156109cc575f80fd5b506105566109db366004613f25565b611cea565b3480156109eb575f80fd5b50600c5461052790610100900460ff1681565b348015610a09575f80fd5b506108e7611cfb565b348015610a1d575f80fd5b505f546001600160a01b0316610853565b348015610a39575f80fd5b50610853610a483660046140cd565b60601c90565b348015610a59575f80fd5b50610556610a6836600461407f565b611d07565b348015610a78575f80fd5b50610556610a873660046141e0565b611dd7565b348015610a97575f80fd5b50610527610aa6366004613f4d565b611e1c565b348015610ab6575f80fd5b50610556610ac5366004614599565b611e6c565b348015610ad5575f80fd5b50610556610ae4366004614394565b6120a1565b348015610af4575f80fd5b506104d460205481565b348015610b09575f80fd5b506104fb6120a9565b348015610b1d575f80fd5b50610556610b2c36600461418b565b50505050565b348015610b3d575f80fd5b50610556610b4c366004613f4d565b6120b8565b348015610b5c575f80fd5b506105566120e6565b348015610b70575f80fd5b50610556610b7f366004614681565b6120ef565b348015610b8f575f80fd5b50600c546105279062010000900460ff1681565b348015610bae575f80fd5b50610556610bbd36600461469d565b612127565b348015610bcd575f80fd5b506104d4612497565b348015610be1575f80fd5b50610927610bf03660046140cd565b612539565b348015610c00575f80fd5b50610527610c0f366004613f25565b612548565b348015610c1f575f80fd5b50610527610c2e366004613f4d565b612579565b348015610c3e575f80fd5b50610556610c4d36600461469d565b612585565b348015610c5d575f80fd5b50610c666128e1565b6040516104de91906146d6565b348015610c7e575f80fd5b50610556610c8d3660046141e0565b6129ed565b348015610c9d575f80fd5b50610556610cac36600461418b565b612a69565b348015610cbc575f80fd5b50610556610ccb36600461407f565b612b15565b348015610cdb575f80fd5b50610527610cea366004614728565b612bef565b348015610cfa575f80fd5b50610556610d09366004613f4d565b612c47565b348015610d19575f80fd5b50610556610d28366004613f4d565b612c97565b348015610d38575f80fd5b50610556610d4736600461407f565b612ce5565b348015610d57575f80fd5b50610556610d66366004613f4d565b612db6565b348015610d76575f80fd5b50610556610d85366004613f4d565b612dc4565b348015610d95575f80fd5b50610556612e12565b348015610da9575f80fd5b50610527610db8366004613f4d565b612e27565b348015610dc8575f80fd5b506104d4610dd7366004614787565b6001600160a01b039182165f908152601a6020908152604080832093909416825291909152205490565b348015610e0c575f80fd5b50610527610e1b366004613f4d565b612e33565b348015610e2b575f80fd5b50610556610e3a3660046147af565b505050565b348015610e4a575f80fd5b5060185460ff16610527565b348015610e61575f80fd5b50610556610e703660046147f6565b612e3d565b348015610e80575f80fd5b50610556610e8f366004613f4d565b612e93565b348015610e9f575f80fd5b506104d4612ecd565b348015610eb3575f80fd5b50610556610ec2366004613f4d565b612ed6565b606060078054610ed69061485f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f029061485f565b8015610f4d5780601f10610f2457610100808354040283529160200191610f4d565b820191905f5260205f20905b815481529060010190602001808311610f3057829003601f168201915b5050505050905090565b5f6001600160a01b038316610f985760405162461bcd60e51b81526020600482015260026024820152611a9b60f11b60448201526064015b60405180910390fd5b335f818152601a602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b335f9081526004602052604090205460ff1661102a5760405162461bcd60e51b8152600401610f8f90614897565b6110348282612f24565b5050565b5f610ff6601683613029565b335f9081526004602052604090205460ff166110725760405162461bcd60e51b8152600401610f8f90614897565b81515f5b818110156110cd575f601d5f868481518110611094576110946148ce565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611076565b5081156110f0576013805461ff001981166101009182900460ff16159091021790555b6040517f1026f350db65e330a8dada6470b8baf246c371f4b25493091f0a102b34e8caac905f90a1505050565b5f61112b600185858561304d565b6111463385858560405180602001604052805f8152506134f7565b5060019392505050565b5f8281526001602052604081205460ff16156111a65760405173455243313832305f4143434550545f4d4147494360601b6020820152603401604051602081830303815290604052805190602001209050610ff6565b505f610ff6565b6111b95f33868661304d565b610b2c3333868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506134f792505050565b61120433612579565b8061121857505f546001600160a01b031633145b611220575f80fd5b6112298161358f565b50565b335f9081526004602052604090205460ff1661125a5760405162461bcd60e51b8152600401610f8f90614897565b611229816135d0565b335f9081526004602052604090205460ff166112915760405162461bcd60e51b8152600401610f8f90614897565b82515f5b81811015611308576113008582815181106112b2576112b26148ce565b60200260200101518583815181106112cc576112cc6148ce565b60200260200101516001600160a01b039091165f908152601b602052604090206bffffffffffffffffffffffff9091169055565b600101611295565b50811561132d57600c805462ff0000198116620100009182900460ff16159091021790555b6040517ea4395452943969752cd541acd282f439ffcc87ee336339d1c61fb7c726e5b8905f90a150505050565b335f9081526004602052604090205460ff166113885760405162461bcd60e51b8152600401610f8f90614897565b61139187613616565b6113ad5760405162461bcd60e51b8152600401610f8f906148e2565b6001600160a01b0388166113d35760405162461bcd60e51b8152600401610f8f906148fe565b6001600160a01b0389165f9081526019602052604090205487111561140a5760405162461bcd60e51b8152600401610f8f9061491a565b6001600160a01b0389165f9081526019602052604090205461142d90889061494a565b6001600160a01b03808b165f9081526019602052604080822093909355908a168152205461145c90889061495d565b6001600160a01b03808a165f9081526019602052604080822093909355908b1681529081205490036114955761149360058a61362c565b505b6114a0600589613640565b5086886001600160a01b03168a6001600160a01b03167fe7d9eaa27a41af4910a6f243e47a5aad24629bdfa88648279b967f132d9180be85856040516114e7929190614970565b60405180910390a4505050505050505050565b61150333612e27565b61150b575f80fd5b81306001600160a01b03821603611520575f80fd5b610e3a33848460405180602001604052805f815250613654565b61154333611038565b61154b575f80fd5b6112293382612f24565b335f9081526004602052604090205460ff166115835760405162461bcd60e51b8152600401610f8f90614897565b61158e601f5f613e1b565b5f602155600c805461ff001916610100179055601f54156116035760405162461bcd60e51b815260206004820152602960248201527f5265636f7264206361707475726520616c726561647920646f6e6520666f722060448201526874686973206461746560b81b6064820152608401610f8f565b5f5b61160f60056137d9565b81101561171e575f6116226005836137e2565b600e546001600160a01b0382165f908152601960205260408120549293509161164b919061499e565b61165d90670de0b6b3a764000061499e565b604080518082019091526001600160a01b03848116825260208201838152601f80546001810182555f91825284517fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807600290920291820180546001600160a01b031916919095161790935590517fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d808909201919091556021805493945091928492919061170a90849061495d565b909155505060019093019250611605915050565b506011546001600160a01b031661175c576021546040517f0833a97d675e2963a7176cc4032868fa5c777bd23dfce5964ed88cebd1da7902905f90a2565b5f670de0b6b3a764000060215461177391906149c9565b60405190915081907f0833a97d675e2963a7176cc4032868fa5c777bd23dfce5964ed88cebd1da7902905f90a2505b565b6117ac6137ed565b6117b760168261362c565b15611229576040516001600160a01b038216907f2bb4cf2bebe4f31d36d77e0a766b51d27c2f67f846f89ebae83a467f0def4d23905f90a250565b335f9081526004602052604090205460ff166118205760405162461bcd60e51b8152600401610f8f90614897565b6001600160a01b0382165f81815260046020908152604091829020805460ff19168515159081179091558251938452908301527f172222a70f6da270c7e4ca0677229ed80f83e295dd3d20f08e671667404b387591015b60405180910390a15050565b335f9081526004602052604090205460609060ff166118b45760405162461bcd60e51b8152600401610f8f90614897565b601f545f906001600160401b038111156118d0576118d0613f66565b60405190808252806020026020018201604052801561191457816020015b604080518082019091525f80825260208201528152602001906001900390816118ee5790505b5090505f5b601f5481101561198f57601f8181548110611936576119366148ce565b5f9182526020918290206040805180820190915260029092020180546001600160a01b031682526001015491810191909152825183908390811061197c5761197c6148ce565b6020908102919091010152600101611919565b50905090565b335f9081526004602052604090205460ff166119c35760405162461bcd60e51b8152600401610f8f90614897565b6119ce601e5f613e1b565b5f6020819055600c805461ff0019166101001790555b6119ee60056137d9565b811015611b18575f611a016005836137e2565b600d54600e546001600160a01b0383165f9081526019602052604081205493945092620f42409291611a329161499e565b611a3c919061499e565b611a4e90670de0b6b3a764000061499e565b611a5891906149c9565b604080518082019091526001600160a01b0384811682526020808301848152601e80546001810182555f91825285517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350600290920291820180546001600160a01b031916919096161790945590517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e351909301929092558054939450919284929190611b0490849061495d565b9091555050600190930192506119e4915050565b506011546001600160a01b0316611b56576020546040517ff9fbf2266031d6d2a2f98b3124ec2a20b803e5c65b71660adb052095f1207acf905f90a2565b5f670de0b6b3a7640000602054611b6d91906149c9565b60405190915081907ff9fbf2266031d6d2a2f98b3124ec2a20b803e5c65b71660adb052095f1207acf905f90a250565b6060611ba96014613819565b905090565b611bb66137ed565b6018805462ff0000191690556040517fc479843d28551cd1121b0350b3efc2fa391425b75c899ee747da706739c0e08f905f90a1565b601f8181548110611bfb575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f610ff682613825565b335f9081526004602052604081205460ff16611c5a5760405162461bcd60e51b8152600401610f8f90614897565b6011546001600160a01b0316611c6f57504790565b6011546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611cb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba991906149dc565b611ce16137ed565b6117a25f613842565b611cf333611038565b61102a575f80fd5b6060611ba96016613819565b335f9081526004602052604090205460ff16611d355760405162461bcd60e51b8152600401610f8f90614897565b81515f5b81811015611d90575f601c5f868481518110611d5757611d576148ce565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611d39565b508115611daa576013805460ff19811660ff909116151790555b6040517f6c9162f2fa2b4a9188d83060e1b8a50ea6afd3e1c2d72d00b1fb7308eb4baa9b905f90a1505050565b335f9081526004602052604090205460ff16611e055760405162461bcd60e51b8152600401610f8f90614897565b6018805460ff191682151517905561122933613842565b335f9081526004602052604081205460ff16611e4a5760405162461bcd60e51b8152600401610f8f90614897565b506001600160a01b0381165f9081526004602052604090205460ff165b919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611eb05750825b90505f826001600160401b03166001148015611ecb5750303b155b905081158015611ed9575080155b15611ef75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611f2157845460ff60401b1916600160401b1785555b6007611f2d8f82614a37565b506008611f3a8e82614a37565b50600b8a90558a515f5b81811015611f9c57600160045f8f8481518110611f6357611f636148ce565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611f44565b506013805461ffff19168b151561ff001916176101008b15150217905560018d1015611fc6575f80fd5b60098d9055611fd433613842565b6018805462ffff00199081166201010017909155600c8054909116620100008a1515021790558651600d55602080880151600e556080880151805161201d92600f920190613e39565b505060608601516010556040860151601180546001600160a01b0319166001600160a01b03909216919091179055831561209157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b6110346137ed565b606060088054610ed69061485f565b6120c133612579565b806120d557505f546001600160a01b031633145b6120dd575f80fd5b61122981613891565b6117a23361358f565b335f9081526004602052604090205460ff1661211d5760405162461bcd60e51b8152600401610f8f90614897565b61103482826138d2565b335f9081526004602052604090205460ff166121555760405162461bcd60e51b8152600401610f8f90614897565b601e546121985760405162461bcd60e51b81526020600482015260116024820152704e6f207265636f7264206361707475726560781b6044820152606401610f8f565b6011545f906001600160a01b03166121d4574790506020548110156121cf5760405162461bcd60e51b8152600401610f8f90614af6565b61227a565b5f670de0b6b3a76400006020546121eb91906149c9565b6011546040516370a0823160e01b81523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa158015612232573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225691906149dc565b9150808210156122785760405162461bcd60e51b8152600401610f8f90614af6565b505b5f5b601e54811015612450575f601e828154811061229a5761229a6148ce565b5f9182526020822060029091020154601e80546001600160a01b03909216935090849081106122cb576122cb6148ce565b5f918252602082206001600290920201015491506122f1670de0b6b3a7640000836149c9565b6011549091506001600160a01b031661233d576040516001600160a01b0384169083156108fc029084905f818181858888f19350505050158015612337573d5f803e3d5ffd5b506123ef565b60115460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561238d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b19190614b3b565b6123ef5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610f8f565b8160205f828254612400919061494a565b90915550506040518281526001600160a01b0384169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505060010161227c565b5061245c601e5f613e1b565b600c805461ff00191690556040517fdf9f23132000ba50bc6cb799d6e7604668f3b7f75a6f6e81d3850d3bf7031da290611877908490613edd565b5f46817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6124c3610ec7565b805190602001206124e86040805180820190915260018152603160f81b602082015290565b80516020918201206040805192830194909452928101919091526060810191909152608081018390523060a082015260c00160408051601f1981840301815291905280516020909101209392505050565b601e8181548110611bfb575f80fd5b5f6125555f33858561304d565b6125703333858560405180602001604052805f8152506134f7565b50600192915050565b5f610ff6600283613931565b335f9081526004602052604090205460ff166125b35760405162461bcd60e51b8152600401610f8f90614897565b601f546125fb5760405162461bcd60e51b81526020600482015260166024820152754e6f207265636f7264206361707475726520646f6e6560501b6044820152606401610f8f565b6011545f906001600160a01b0316612637574790506021548110156126325760405162461bcd60e51b8152600401610f8f90614b56565b6126dd565b5f670de0b6b3a764000060205461264e91906149c9565b6011546040516370a0823160e01b81523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa158015612695573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b991906149dc565b9150808210156126db5760405162461bcd60e51b8152600401610f8f90614b56565b505b5f5b601f5481101561289a575f601f82815481106126fd576126fd6148ce565b5f9182526020822060029091020154601f80546001600160a01b039092169350908490811061272e5761272e6148ce565b5f91825260208220600160029092020101549150612754670de0b6b3a7640000836149c9565b6011549091506001600160a01b03166127a0576040516001600160a01b0384169083156108fc029084905f818181858888f1935050505015801561279a573d5f803e3d5ffd5b50612852565b60115460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156127f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128149190614b3b565b6128525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610f8f565b8160215f828254612863919061494a565b90915550506001600160a01b0383165f9081526019602052604090205461288a8482612f24565b5050600190920191506126df9050565b506128a6601f5f613e1b565b600c805461ff00191690556040517f77dd3f0a5c4c2408756e8807ec36da68e4e9cae81ceb894afe65b826d59c0a5990611877908490613edd565b335f9081526004602052604090205460609060ff166129125760405162461bcd60e51b8152600401610f8f90614897565b601e545f906001600160401b0381111561292e5761292e613f66565b60405190808252806020026020018201604052801561297257816020015b604080518082019091525f808252602082015281526020019060019003908161294c5790505b5090505f5b601e5481101561198f57601e8181548110612994576129946148ce565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915282518390839081106129da576129da6148ce565b6020908102919091010152600101612977565b335f9081526004602052604090205460ff16612a1b5760405162461bcd60e51b8152600401610f8f90614897565b600c805461ff0019166101008315158102919091179182905560405160ff91909204161515907ffa3c9e7a0efc36040755d239963e7d1944ea802d7503fff97f61104b68e941be905f90a250565b335f9081526004602052604090205460ff16612a975760405162461bcd60e51b8152600401610f8f90614897565b60185462010000900460ff16612ad45760405162461bcd60e51b8152602060048201526002602482015261353560f01b6044820152606401610f8f565b610b2c33858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061365492505050565b335f9081526004602052604090205460ff16612b435760405162461bcd60e51b8152600401610f8f90614897565b81515f5b81811015612b9f576001601d5f868481518110612b6657612b666148ce565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101612b47565b508115612bc2576013805461ff001981166101009182900460ff16159091021790555b6040517fc2b8ce36f530fca9801d55235f4335b1ff4f1db20c720341cfcdd0ce242538d3905f90a1505050565b5f81604051602001612c019190614b9d565b6040516020818303038152906040528051906020012083604051602001612c289190614b9d565b6040516020818303038152906040528051906020012014905092915050565b335f9081526004602052604090205460ff16612c755760405162461bcd60e51b8152600401610f8f90614897565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b612c9f6137ed565b612caa601482613640565b15611229576040516001600160a01b038216907f3177eddbd62c86b9e49174e4d7c250c9271899d55f1a05a53a25fb5431a33d23905f90a250565b335f9081526004602052604090205460ff16612d135760405162461bcd60e51b8152600401610f8f90614897565b81515f5b81811015612d6f576001601c5f868481518110612d3657612d366148ce565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101612d17565b508115612d89576013805460ff19811660ff909116151790555b6040517fd0fc494010b4a3c2c3a2b02040427125376a5da1a02f50dfe6ca0c2a35cc1547905f90a1505050565b612dbf81612c97565b611229815b612dcc6137ed565b612dd7601682613640565b15611229576040516001600160a01b038216907f3de47bc1ae4e56ae4f1c2da2686ee148053fa82fbf97533a896fddf1cfca7a1f905f90a250565b612e1a6137ed565b6018805461ff0019169055565b5f610ff6601483613029565b5f610ff6826139b2565b612e4a600186868661304d565b612e8c3386868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506134f792505050565b5050505050565b612e9b6137ed565b6001600160a01b038116612ec457604051631e4fbdf760e01b81525f6004820152602401610f8f565b61122981613842565b5f611ba96139cf565b612ede6137ed565b612ee960148261362c565b15611229576040516001600160a01b038216907fd3b9a3a5260bfbfaab12c66f783dd4ef836b4f87cac87699a3b5c242fdd8c50a905f90a250565b612f2d81613616565b612f495760405162461bcd60e51b8152600401610f8f906148e2565b80600a54612f57919061494a565b600a556001600160a01b0382165f90815260196020526040902054612f7d90829061494a565b6001600160a01b0383165f90815260196020526040812082905503612fa957612fa760058361362c565b505b612fb233611038565b15612ff0576040516001600160a01b0383169082907fb56a7e25fc42a9a1240c0eeeb382485875dc0d4dc740212e482d8e747eaf88b3905f90a35050565b6040516001600160a01b0383169082907f308f966e4b558bb973dcec5638dde6a896fd6f6396a2af5def53710338b4f62b905f90a35050565b6001600160a01b0381165f90815260018301602052604081205415155b9392505050565b335f9081526004602052604090205460ff16156130ab57600c54610100900460ff16156130ab5760405162461bcd60e51b815260206004820152600c60248201526b333937bd32b7103a37b5b2b760a11b6044820152606401610f8f565b600c5462010000900460ff161561314f576001600160a01b0383165f908152601b60205260409020541561314f576001600160a01b0383165f908152601b602090815260408083205460199092529091205461310890839061494a565b101561314f5760405162461bcd60e51b81526020600482015260166024820152754e6f7420656e6f756768206672656520746f6b656e7360501b6044820152606401610f8f565b831561338857335f9081526004602052604090205460ff1615610b2c5760135460ff161561322b5761318082613825565b15156001146131d15760405162461bcd60e51b815260206004820152601c60248201527f5265636569766572206973206e6f7420696e2077686974654c697374000000006044820152606401610f8f565b6131da83613825565b151560011461322b5760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206973206e6f7420696e2077686974654c6973740000000000006044820152606401610f8f565b601354610100900460ff16156132db57613244836139b2565b1561328a5760405162461bcd60e51b815260206004820152601660248201527514d95b99195c881a5cc81a5b88189b1858dad31a5cdd60521b6044820152606401610f8f565b613293826139b2565b156132db5760405162461bcd60e51b8152602060048201526018602482015277149958d95a5d995c881a5cc81a5b88189b1858dad31a5cdd60421b6044820152606401610f8f565b6001600160a01b0383165f908152601a602090815260408083203384529091529020548111156133325760405162461bcd60e51b8152602060048201526002602482015261353360f01b6044820152606401610f8f565b6001600160a01b0383165f908152601a6020908152604080832033845290915290205461336090829061494a565b6001600160a01b0384165f908152601a60209081526040808320338452909152902055610b2c565b60135460ff16156134475761339c82613825565b15156001146133ed5760405162461bcd60e51b815260206004820152601c60248201527f5265636569766572206973206e6f7420696e2077686974654c697374000000006044820152606401610f8f565b6133f683613825565b15156001146134475760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206973206e6f7420696e2077686974654c6973740000000000006044820152606401610f8f565b601354610100900460ff1615610b2c57613460836139b2565b156134a65760405162461bcd60e51b815260206004820152601660248201527514d95b99195c881a5cc81a5b88189b1858dad31a5cdd60521b6044820152606401610f8f565b6134af826139b2565b15610b2c5760405162461bcd60e51b8152602060048201526018602482015277149958d95a5d995c881a5cc81a5b88189b1858dad31a5cdd60421b6044820152606401610f8f565b6001600160a01b0384165f908152601960205260409020548083111561352f5760405162461bcd60e51b8152600401610f8f9061491a565b61353a8585856139f7565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161357f91815260200190565b60405180910390a3505050505050565b61359a600282613b56565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692905f90a250565b600c805462ff0000191662010000831515908102919091179091556040517f3cf68b6783de3d44bb0cf796cc5945226dbfa25a86aeb8d6448bf9b3fe3d0bb2905f90a250565b5f600954826136259190614bb8565b1592915050565b5f613046836001600160a01b038416613bd7565b5f613046836001600160a01b038416613cba565b61365d82613616565b6136795760405162461bcd60e51b8152600401610f8f906148e2565b6001600160a01b03831661369f5760405162461bcd60e51b8152600401610f8f906148fe565b600b5482600a546136b0919061495d565b11156136fe5760405162461bcd60e51b815260206004820152601f60248201527f457863656564206d6178696d756d206e756d626572206f6620746f6b656e73006044820152606401610f8f565b81600a5461370c919061495d565b600a556001600160a01b0383165f9081526019602052604090205461373290839061495d565b6001600160a01b0384165f90815260196020526040902055613755600584613640565b5061375f84612e27565b1561379e5760405182906001600160a01b038516907f8a29f8ae4882b2c5581772e786b0185a0e826add8261f6be70eda200c7563bf3905f90a3610b2c565b60405182906001600160a01b038516907fec3ab5b83fb387fbcc409a3f905939f176ff75fcefdbeecf3718155928fce4ef905f90a350505050565b5f610ff6825490565b5f6130468383613cff565b5f546001600160a01b031633146117a25760405163118cdaa760e01b8152336004820152602401610f8f565b60605f61304683613d25565b6001600160a01b03165f908152601c602052604090205460ff1690565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61389c600282613d7e565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6905f90a250565b6013805461ffff191683151561ff001916176101008315158102919091179182905560405160ff9183048216151592919091161515907f91234244b5e4097cf8113df483da0ac0406a7ad43c3796d4fdcc552759781f71905f90a35050565b5f6001600160a01b0382166139935760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610f8f565b506001600160a01b03165f908152602091909152604090205460ff1690565b6001600160a01b03165f908152601d602052604090205460ff1690565b465f9081526003602052604081205480156139e957919050565b6139f1613df9565b91505090565b613a0081613616565b613a1c5760405162461bcd60e51b8152600401610f8f906148e2565b6001600160a01b038216613a425760405162461bcd60e51b8152600401610f8f906148fe565b6001600160a01b0383165f90815260196020526040902054811115613a795760405162461bcd60e51b8152600401610f8f9061491a565b6001600160a01b0383165f90815260196020526040902054613a9c90829061494a565b6001600160a01b038085165f908152601960205260408082209390935590841681522054613acb90829061495d565b6001600160a01b038084165f90815260196020526040808220939093559085168152908120549003613b0457613b0260058461362c565b505b613b0f600583613640565b5080826001600160a01b0316846001600160a01b03167f85b39441afad6cd200c83af534024f6e8a2fad0ea2bf83509ff9fd197013188460405160405180910390a4505050565b613b608282613931565b613bb65760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610f8f565b6001600160a01b03165f90815260209190915260409020805460ff19169055565b5f8181526001830160205260408120548015613cb1575f613bf960018361494a565b85549091505f90613c0c9060019061494a565b9050808214613c6b575f865f018281548110613c2a57613c2a6148ce565b905f5260205f200154905080875f018481548110613c4a57613c4a6148ce565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613c7c57613c7c614bcb565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610ff6565b5f915050610ff6565b5f8181526001830160205260408120546111a657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610ff6565b5f825f018281548110613d1457613d146148ce565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015613d7257602002820191905f5260205f20905b815481526020019060010190808311613d5e575b50505050509050919050565b613d888282613931565b15613dd55760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610f8f565b6001600160a01b03165f90815260209190915260409020805460ff19166001179055565b5f4681613e04612497565b5f9283526003602052604090922082905550919050565b5080545f8255600202905f5260205f20908101906112299190613e82565b828054828255905f5260205f20908101928215613e72579160200282015b82811115613e72578251825591602001919060010190613e57565b50613e7e929150613ea7565b5090565b5b80821115613e7e5780546001600160a01b03191681555f6001820155600201613e83565b5b80821115613e7e575f8155600101613ea8565b5f5b83811015613ed5578181015183820152602001613ebd565b50505f910152565b602081525f8251806020840152613efb816040850160208701613ebb565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611e67575f80fd5b5f8060408385031215613f36575f80fd5b613f3f83613f0f565b946020939093013593505050565b5f60208284031215613f5d575f80fd5b61304682613f0f565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715613f9c57613f9c613f66565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613fca57613fca613f66565b604052919050565b5f6001600160401b03821115613fea57613fea613f66565b5060051b60200190565b5f82601f830112614003575f80fd5b8135602061401861401383613fd2565b613fa2565b8083825260208201915060208460051b870101935086841115614039575f80fd5b602086015b8481101561405c5761404f81613f0f565b835291830191830161403e565b509695505050505050565b8015158114611229575f80fd5b8035611e6781614067565b5f8060408385031215614090575f80fd5b82356001600160401b038111156140a5575f80fd5b6140b185828601613ff4565b92505060208301356140c281614067565b809150509250929050565b5f602082840312156140dd575f80fd5b5035919050565b5f805f606084860312156140f6575f80fd5b6140ff84613f0f565b925061410d60208501613f0f565b9150604084013590509250925092565b5f806040838503121561412e575f80fd5b8235915061413e60208401613f0f565b90509250929050565b5f8083601f840112614157575f80fd5b5081356001600160401b0381111561416d575f80fd5b602083019150836020828501011115614184575f80fd5b9250929050565b5f805f806060858703121561419e575f80fd5b6141a785613f0f565b93506020850135925060408501356001600160401b038111156141c8575f80fd5b6141d487828801614147565b95989497509550505050565b5f602082840312156141f0575f80fd5b813561304681614067565b5f805f6060848603121561420d575f80fd5b83356001600160401b0380821115614223575f80fd5b61422f87838801613ff4565b9450602091508186013581811115614245575f80fd5b86019050601f81018713614257575f80fd5b803561426561401382613fd2565b81815260059190911b82018301908381019089831115614283575f80fd5b928401925b828410156142ba5783356bffffffffffffffffffffffff811681146142ab575f80fd5b82529284019290840190614288565b80965050505050506142ce60408501614074565b90509250925092565b5f805f805f805f805f60c08a8c0312156142ef575f80fd5b6142f88a613f0f565b985061430660208b01613f0f565b975060408a0135965060608a01356001600160401b0380821115614328575f80fd5b6143348d838e01614147565b909850965060808c013591508082111561434c575f80fd5b6143588d838e01614147565b909650945060a08c0135915080821115614370575f80fd5b5061437d8c828d01614147565b915080935050809150509295985092959850929598565b5f80604083850312156143a5575f80fd5b6143ae83613f0f565b915060208301356140c281614067565b602080825282518282018190525f919060409081850190868401855b828110156144105761440084835180516001600160a01b03168252602090810151910152565b92840192908501906001016143da565b5091979650505050505050565b602080825282518282018190525f9190848201906040850190845b8181101561445d5783516001600160a01b031683529284019291840191600101614438565b50909695505050505050565b5f82601f830112614478575f80fd5b81356001600160401b0381111561449157614491613f66565b6144a4601f8201601f1916602001613fa2565b8181528460208386010111156144b8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60a082840312156144e4575f80fd5b6144ec613f7a565b9050813581526020808301358183015261450860408401613f0f565b60408301526060830135606083015260808301356001600160401b0381111561452f575f80fd5b8301601f8101851361453f575f80fd5b803561454d61401382613fd2565b81815260059190911b8201830190838101908783111561456b575f80fd5b928401925b8284101561458957833582529284019290840190614570565b6080860152509295945050505050565b5f805f805f805f805f6101208a8c0312156145b2575f80fd5b89356001600160401b03808211156145c8575f80fd5b6145d48d838e01614469565b9a5060208c01359150808211156145e9575f80fd5b6145f58d838e01614469565b995060408c0135985060608c0135915080821115614611575f80fd5b61461d8d838e01613ff4565b975060808c0135965061463260a08d01614074565b955061464060c08d01614074565b945061464e60e08d01614074565b93506101008c0135915080821115614664575f80fd5b506146718c828d016144d4565b9150509295985092959850929598565b5f8060408385031215614692575f80fd5b82356143ae81614067565b5f602082840312156146ad575f80fd5b81356001600160401b038111156146c2575f80fd5b6146ce84828501614469565b949350505050565b602080825282518282018190525f919060409081850190868401855b828110156144105761471884835180516001600160a01b03168252602090810151910152565b92840192908501906001016146f2565b5f8060408385031215614739575f80fd5b82356001600160401b038082111561474f575f80fd5b61475b86838701614469565b93506020850135915080821115614770575f80fd5b5061477d85828601614469565b9150509250929050565b5f8060408385031215614798575f80fd5b6147a183613f0f565b915061413e60208401613f0f565b5f805f604084860312156147c1575f80fd5b8335925060208401356001600160401b038111156147dd575f80fd5b6147e986828701614147565b9497909650939450505050565b5f805f805f6080868803121561480a575f80fd5b61481386613f0f565b945061482160208701613f0f565b93506040860135925060608601356001600160401b03811115614842575f80fd5b61484e88828901614147565b969995985093965092949392505050565b600181811c9082168061487357607f821691505b60208210810361489157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601b908201527f63616c6c6572206973206e6f742061646d696e4f70657261746f720000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b602080825260029082015261035360f41b604082015260600190565b602080825260029082015261353760f01b604082015260600190565b6020808252600290820152611a9960f11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ff657610ff6614936565b80820180821115610ff657610ff6614936565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b8082028115828204841417610ff657610ff6614936565b634e487b7160e01b5f52601260045260245ffd5b5f826149d7576149d76149b5565b500490565b5f602082840312156149ec575f80fd5b5051919050565b601f821115610e3a57805f5260205f20601f840160051c81016020851015614a185750805b601f840160051c820191505b81811015612e8c575f8155600101614a24565b81516001600160401b03811115614a5057614a50613f66565b614a6481614a5e845461485f565b846149f3565b602080601f831160018114614a97575f8415614a805750858301515b5f19600386901b1c1916600185901b178555614aee565b5f85815260208120601f198616915b82811015614ac557888601518255948401946001909101908401614aa6565b5085821015614ae257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60208082526025908201527f496e73756666696369656e742066756e647320666f7220636f75706f6e2070616040820152641e5b595b9d60da1b606082015260800190565b5f60208284031215614b4b575f80fd5b815161304681614067565b60208082526027908201527f496e73756666696369656e742066756e647320666f72206d61747572697479206040820152661c185e5b595b9d60ca1b606082015260800190565b5f8251614bae818460208701613ebb565b9190910192915050565b5f82614bc657614bc66149b5565b500690565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122046a154b8b201e639d90ad492f834a98c4bab60e4b8304e993d32c58a437a3e6364736f6c63430008180033