0x60e06040523480156200001157600080fd5b5060405162005a3a38038062005a3a83398181016040526101808110156200003857600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b01516101208c01516101408d01516101608e0180519a519c9e9b9d999c989b979a969995989497939692959194939182019284640100000000821115620000a857600080fd5b908301906020820185811115620000be57600080fd5b8251640100000000811182820188101715620000d957600080fd5b82525081516020918201929091019080838360005b8381101562000108578181015183820152602001620000ee565b50505050905090810190601f168015620001365780820380516001836020036101000a031916815260200191505b506040525050600080546001600160a01b03191633179055508b8b8b8b8b8b89620001658787878787620002ca565b600380546001600160a01b0319166001600160a01b0384169081179091556040516000907f4966a50c93f855342ccf6c5c0d358b85b91335b2acedc7da0932f691f351711a908290a3620001b981620003bc565b620001c362000653565b620001cd62000653565b60005b601f8160ff1610156200021d576001838260ff16601f8110620001ef57fe5b61ffff909216602092909202015260018260ff8316601f81106200020f57fe5b6020020152600101620001d0565b506200022d600583601f62000672565b506200023d600982601f6200070f565b505050505060f887901b7fff000000000000000000000000000000000000000000000000000000000000001660c052505083516200028693506030925060208501915062000740565b50620002928362000435565b6200029f6000806200050d565b50505050601791820b820b604090811b60805290820b90910b901b60a05250620007d9945050505050565b6040805160a0808201835263ffffffff88811680845288821660208086018290528984168688018190528985166060808901829052958a1660809889018190526002805463ffffffff1916871763ffffffff60201b191664010000000087021763ffffffff60401b19166801000000000000000085021763ffffffff60601b19166c0100000000000000000000000084021763ffffffff60801b1916600160801b830217905589519586529285019390935283880152928201529283015291517fd0d9486a2c673e2a4b57fc82e4c8a556b3e2b82dd5db07e2c04a920ca0f469b6929181900390910190a15050505050565b6004546001600160a01b0390811690821681146200043157600480546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517f793cb73064f3c8cde7e187ae515511e6e56d1ee89bf08b82fa60fb70f8d489129281900390910190a15b5050565b6000546001600160a01b0316331462000495576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b602f546001600160a01b0390811690821681146200043157602f80546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517f27b89aede8b560578baaa25ee5ce3852c5eecad1e114b941bbd89e1eb4bae6349281900390910190a15050565b6000546001600160a01b031633146200056d576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b60408051808201909152602e546001600160a01b03808216808452600160a01b90920463ffffffff1660208401528416141580620005bb57508163ffffffff16816020015163ffffffff1614155b156200064e576040805180820182526001600160a01b0385811680835263ffffffff8681166020948501819052602e80546001600160a01b031916841763ffffffff60a01b1916600160a01b8302179055865187860151875193168352948201528451919493909216927fb04e3a37abe9c0fcdfebdeae019a8e2b12ddf53f5d55ffb0caccc1bedaca1541928290030190a35b505050565b604051806103e00160405280601f906020820280368337509192915050565b600283019183908215620006fd5791602002820160005b83821115620006cb57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000689565b8015620006fb5782816101000a81549061ffff0219169055600201602081600101049283019260010302620006cb565b505b506200070b929150620007c2565b5090565b82601f8101928215620006fd579160200282015b82811115620006fd57825182559160200191906001019062000723565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620007785760008555620006fd565b82601f106200079357805160ff1916838001178555620006fd565b82800160010185558215620006fd5791820182811115620006fd57825182559160200191906001019062000723565b5b808211156200070b5760008155600101620007c3565b60805160401c60a05160401c60c05160f81c6152216200081960003980610dbf525080611aaf528061354e525080610d1e528061352152506152216000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806398e5b12a1161017b578063c9807539116100d8578063eb4571631161008c578063f2fde38b11610071578063f2fde38b14610b46578063fbffd2c114610b6c578063feaf968c14610b92576102c8565b8063eb45716314610ae6578063eb5dcd6c14610b18576102c8565b8063e4902f82116100bd578063e4902f8214610a37578063e5fe457714610a74578063e76d516814610ade576102c8565b8063c98075391461091b578063d09dc33914610a2f576102c8565b8063b121e1471161012f578063b633620c11610114578063b633620c1461088d578063bd824706146108aa578063c1075329146108ef576102c8565b8063b121e1471461084a578063b5ab58dc14610870576102c8565b80639a6fc8f5116101605780639a6fc8f5146106ef5780639c849b30146107625780639e3ceeab14610824576102c8565b806398e5b12a146106c0578063996e8298146106e7576102c8565b806370da2f671161022957806381ff7048116101dd5780638ac28d5a116101c25780638ac28d5a146106625780638da5cb5b146106885780638e0566de14610690576102c8565b806381ff7048146106095780638205bf6a1461065a576102c8565b80637284e4161161020e5780637284e416146105a157806379ba5097146105a957806381411834146105b1576102c8565b806370da2f671461057557806370efdf2d1461057d576102c8565b80634fb174701161028057806354fd4d501161026557806354fd4d5014610438578063585aa7de14610440578063668a0f021461056d576102c8565b80634fb174701461040057806350d25bcd14610430576102c8565b806322adbc78116102b157806322adbc781461038257806329937268146103a1578063313ce567146103e2576102c8565b80630eafb25b146102cd578063181f5a7714610305575b600080fd5b6102f3600480360360208110156102e357600080fd5b50356001600160a01b0316610b9a565b60408051918252519081900360200190f35b61030d610ce5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034757818101518382015260200161032f565b50505050905090810190601f1680156103745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038a610d1c565b6040805160179290920b8252519081900360200190f35b6103a9610d40565b6040805163ffffffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190f35b6103ea610dbd565b6040805160ff9092168252519081900360200190f35b61042e6004803603604081101561041657600080fd5b506001600160a01b0381358116916020013516610de1565b005b6102f36110c5565b6102f3611101565b61042e600480360360a081101561045657600080fd5b81019060208101813564010000000081111561047157600080fd5b82018360208201111561048357600080fd5b803590602001918460208302840111640100000000831117156104a557600080fd5b9193909290916020810190356401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460208302840111640100000000831117156104f757600080fd5b9193909260ff8335169267ffffffffffffffff60208201351692919060608101906040013564010000000081111561052e57600080fd5b82018360208201111561054057600080fd5b8035906020019184600183028401116401000000008311171561056257600080fd5b509092509050611106565b6102f3611a87565b61038a611aad565b610585611ad1565b604080516001600160a01b039092168252519081900360200190f35b61030d611ae0565b61042e611b94565b6105b9611c62565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105f55781810151838201526020016105dd565b505050509050019250505060405180910390f35b610611611cc3565b6040805163ffffffff94851681529290931660208301527fffffffffffffffffffffffffffffffff00000000000000000000000000000000168183015290519081900360600190f35b6102f3611ce4565b61042e6004803603602081101561067857600080fd5b50356001600160a01b0316611d3f565b610585611db9565b610698611dc8565b604080516001600160a01b03909316835263ffffffff90911660208301528051918290030190f35b6106c8611e0c565b6040805169ffffffffffffffffffff9092168252519081900360200190f35b610585612042565b6107186004803603602081101561070557600080fd5b503569ffffffffffffffffffff16612051565b604051808669ffffffffffffffffffff1681526020018581526020018481526020018381526020018269ffffffffffffffffffff1681526020019550505050505060405180910390f35b61042e6004803603604081101561077857600080fd5b81019060208101813564010000000081111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111640100000000831117156107c757600080fd5b9193909290916020810190356401000000008111156107e557600080fd5b8201836020820111156107f757600080fd5b8035906020019184602083028401116401000000008311171561081957600080fd5b50909250905061219c565b61042e6004803603602081101561083a57600080fd5b50356001600160a01b03166123d5565b61042e6004803603602081101561086057600080fd5b50356001600160a01b03166124c3565b6102f36004803603602081101561088657600080fd5b50356125bc565b6102f3600480360360208110156108a357600080fd5b50356125f2565b61042e600480360360a08110156108c057600080fd5b5063ffffffff813581169160208101358216916040820135811691606081013582169160809091013516612647565b61042e6004803603604081101561090557600080fd5b506001600160a01b03813516906020013561278f565b61042e6004803603608081101561093157600080fd5b81019060208101813564010000000081111561094c57600080fd5b82018360208201111561095e57600080fd5b8035906020019184600183028401116401000000008311171561098057600080fd5b91939092909160208101903564010000000081111561099e57600080fd5b8201836020820111156109b057600080fd5b803590602001918460208302840111640100000000831117156109d257600080fd5b9193909290916020810190356401000000008111156109f057600080fd5b820183602082011115610a0257600080fd5b80359060200191846020830284011164010000000083111715610a2457600080fd5b919350915035612a98565b6102f3613983565b610a5d60048036036020811015610a4d57600080fd5b50356001600160a01b0316613a2d565b6040805161ffff9092168252519081900360200190f35b610a7c613ada565b604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616865263ffffffff909416602086015260ff9092168484015260170b606084015267ffffffffffffffff166080830152519081900360a00190f35b610585613bc9565b61042e60048036036040811015610afc57600080fd5b5080356001600160a01b0316906020013563ffffffff16613bd8565b61042e60048036036040811015610b2e57600080fd5b506001600160a01b0381358116916020013516613d6d565b61042e60048036036020811015610b5c57600080fd5b50356001600160a01b0316613ec8565b61042e60048036036020811015610b8257600080fd5b50356001600160a01b0316613f90565b610718613ff8565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff808216845285948401916101009004166002811115610bdc57fe5b6002811115610be757fe5b9052509050600081602001516002811115610bfe57fe5b1415610c0e576000915050610ce0565b6040805160a08101825260025463ffffffff80821683526401000000008204811660208401526801000000000000000082048116938301939093526c01000000000000000000000000810483166060830181905270010000000000000000000000000000000090910490921660808201528251909160009160019060059060ff16601f8110610c9957fe5b601091828204019190066002029054906101000a900461ffff160361ffff1602633b9aca0002905060016009846000015160ff16601f8110610cd757fe5b01540301925050505b919050565b60408051808201909152601881527f4f6666636861696e41676772656761746f7220342e302e300000000000000000602082015290565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805160a08101825260025463ffffffff808216808452640100000000830482166020850181905268010000000000000000840483169585018690526c01000000000000000000000000840483166060860181905270010000000000000000000000000000000090940490921660809094018490529490939290565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610e40576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b6003546001600160a01b03908116908316811415610e5e57506110c1565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610ebd57600080fd5b505afa158015610ed1573d6000803e3d6000fd5b505050506040513d6020811015610ee757600080fd5b50610ef2905061407c565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610f4157600080fd5b505afa158015610f55573d6000803e3d6000fd5b505050506040513d6020811015610f6b57600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b158015610fdc57600080fd5b505af1158015610ff0573d6000803e3d6000fd5b505050506040513d602081101561100657600080fd5b5051611059576040805162461bcd60e51b815260206004820152601f60248201527f7472616e736665722072656d61696e696e672066756e6473206661696c656400604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925560405190918416907f4966a50c93f855342ccf6c5c0d358b85b91335b2acedc7da0932f691f351711a90600090a350505b5050565b602b54760100000000000000000000000000000000000000000000900463ffffffff166000908152602c6020526040902054601790810b900b90565b600481565b868560ff8616601f831115611162576040805162461bcd60e51b815260206004820152601060248201527f746f6f206d616e79207369676e65727300000000000000000000000000000000604482015290519081900360640190fd5b600081116111b7576040805162461bcd60e51b815260206004820152601a60248201527f7468726573686f6c64206d75737420626520706f736974697665000000000000604482015290519081900360640190fd5b8183146111f55760405162461bcd60e51b81526004018080602001828103825260248152602001806151f16024913960400191505060405180910390fd5b80600302831161124c576040805162461bcd60e51b815260206004820181905260248201527f6661756c74792d6f7261636c65207468726573686f6c6420746f6f2068696768604482015290519081900360640190fd5b6000546001600160a01b031633146112ab576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b6029541561144f57602980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810191600091839081106112e857fe5b6000918252602082200154602a80546001600160a01b039092169350908490811061130f57fe5b6000918252602090912001546001600160a01b0316905061132f8161442c565b6001600160a01b0380831660009081526028602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009081169091559284168252902080549091169055602980548061138b57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055602a8054806113ee57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055506112ab915050565b60005b8a81101561185d576000602860008e8e8581811061146c57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054610100900460ff1660028111156114a257fe5b146114f4576040805162461bcd60e51b815260206004820152601760248201527f7265706561746564207369676e65722061646472657373000000000000000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260016020820152602860008e8e8581811061151b57fe5b602090810292909201356001600160a01b031683525081810192909252604001600020825181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9091161780825591830151909182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360028111156115a657fe5b02179055506000915060079050818c8c858181106115c057fe5b6001600160a01b036020918202939093013583168452830193909352604090910160002054169190911415905061163e576040805162461bcd60e51b815260206004820152601160248201527f7061796565206d75737420626520736574000000000000000000000000000000604482015290519081900360640190fd5b6000602860008c8c8581811061165057fe5b602090810292909201356001600160a01b031683525081019190915260400160002054610100900460ff16600281111561168657fe5b146116d8576040805162461bcd60e51b815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260026020820152602860008c8c858181106116ff57fe5b602090810292909201356001600160a01b031683525081810192909252604001600020825181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9091161780825591830151909182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010083600281111561178a57fe5b021790555090505060298c8c838181106117a057fe5b835460018101855560009485526020948590200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039590920293909301359390931692909217905550602a8a8a8381811061180257fe5b835460018181018655600095865260209586902090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0396909302949094013594909416179091555001611452565b50602b805460ff89167501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909116179055602d80544363ffffffff9081166401000000009081027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff84161780831660010183167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090911617938490559091048116911661192930828f8f8f8f8f8f8f8f614638565b602b60000160006101000a8154816fffffffffffffffffffffffffffffffff021916908360801c02179055506000602b60000160106101000a81548164ffffffffff021916908364ffffffffff1602179055507f25d719d88a4512dd76c7442b910a83360845505894eb444ef299409e180f8fb982828f8f8f8f8f8f8f8f604051808b63ffffffff1681526020018a67ffffffffffffffff16815260200180602001806020018760ff1681526020018667ffffffffffffffff1681526020018060200184810384528c8c82818152602001925060200280828437600083820152601f01601f191690910185810384528a8152602090810191508b908b0280828437600083820152601f01601f191690910185810383528681526020019050868680828437600083820152604051601f909101601f19169092018290039f50909d5050505050505050505050505050a150505050505050505050505050565b602b54760100000000000000000000000000000000000000000000900463ffffffff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b602f546001600160a01b031690565b60308054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b5050505050905090565b6001546001600160a01b03163314611bf3576040805162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015290519081900360640190fd5b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6060602a805480602002602001604051908101604052809291908181526020018280548015611b8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c9c575050505050905090565b602d54602b5463ffffffff808316926401000000009004169060801b909192565b602b54760100000000000000000000000000000000000000000000900463ffffffff166000908152602c60205260409020547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1690565b6001600160a01b03818116600090815260076020526040902054163314611dad576040805162461bcd60e51b815260206004820152601760248201527f4f6e6c792070617965652063616e207769746864726177000000000000000000604482015290519081900360640190fd5b611db68161442c565b50565b6000546001600160a01b031681565b60408051808201909152602e546001600160a01b0381168083527401000000000000000000000000000000000000000090910463ffffffff16602090920182905291565b600080546001600160a01b0316331480611ee85750602f54604080517f6b14daf800000000000000000000000000000000000000000000000000000000815233600482018181526024830193845236604484018190526001600160a01b0390951694636b14daf894929360009391929190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015611ebb57600080fd5b505afa158015611ecf573d6000803e3d6000fd5b505050506040513d6020811015611ee557600080fd5b50515b611f39576040805162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206f776e6572267265717565737465722063616e2063616c6c000000604482015290519081900360640190fd5b6040805160808082018352602b549081901b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016808352700100000000000000000000000000000000820464ffffffffff81166020808601919091527501000000000000000000000000000000000000000000840460ff9081168688015276010000000000000000000000000000000000000000000090940463ffffffff9081166060808801919091528751948552600884901c909116918401919091529216818501529251919233927f3ea16a923ff4b1df6526e854c9e3a995c43385d70e73359e10623c74f0b52037929181900390910190a2806060015160010163ffffffff1691505090565b6004546001600160a01b031690565b600080600080600063ffffffff8669ffffffffffffffffffff1611156040518060400160405280600f81526020017f4e6f20646174612070726573656e7400000000000000000000000000000000008152509061212c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f15781810151838201526020016120d9565b50505050905090810190601f16801561211e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505063ffffffff83166000908152602c6020908152604091829020825180840190935254601781810b810b810b808552780100000000000000000000000000000000000000000000000090920467ffffffffffffffff1693909201839052949594900b939092508291508490565b6000546001600160a01b031633146121fb576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b82811461224f576040805162461bcd60e51b815260206004820181905260248201527f7472616e736d6974746572732e73697a6520213d207061796565732e73697a65604482015290519081900360640190fd5b60005b838110156123ce57600085858381811061226857fe5b905060200201356001600160a01b03169050600084848481811061228857fe5b6001600160a01b0385811660009081526007602090815260409091205492029390930135831693509091169050801580806122d45750826001600160a01b0316826001600160a01b0316145b612325576040805162461bcd60e51b815260206004820152601160248201527f706179656520616c726561647920736574000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03848116600090815260076020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016858316908117909155908316146123be57826001600160a01b0316826001600160a01b0316856001600160a01b03167f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b360405160405180910390a45b5050600190920191506122529050565b5050505050565b6000546001600160a01b03163314612434576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b602f546001600160a01b0390811690821681146110c157602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03848116918217909255604080519284168352602083019190915280517f27b89aede8b560578baaa25ee5ce3852c5eecad1e114b941bbd89e1eb4bae6349281900390910190a15050565b6001600160a01b03818116600090815260086020526040902054163314612531576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792070726f706f736564207061796565732063616e2061636365707400604482015290519081900360640190fd5b6001600160a01b0381811660008181526007602090815260408083208054337fffffffffffffffffffffffff000000000000000000000000000000000000000080831682179093556008909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600063ffffffff8211156125d257506000610ce0565b5063ffffffff166000908152602c6020526040902054601790810b900b90565b600063ffffffff82111561260857506000610ce0565b5063ffffffff166000908152602c60205260409020547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1690565b6004546000546001600160a01b0391821691163314806127215750604080517f6b14daf800000000000000000000000000000000000000000000000000000000815233600482018181526024830193845236604484018190526001600160a01b03861694636b14daf8946000939190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b1580156126f457600080fd5b505afa158015612708573d6000803e3d6000fd5b505050506040513d602081101561271e57600080fd5b50515b612772576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c604482015290519081900360640190fd5b61277a61407c565b612787868686868661473c565b505050505050565b6000546001600160a01b0316331480612869575060048054604080517f6b14daf8000000000000000000000000000000000000000000000000000000008152339381018481526024820192835236604483018190526001600160a01b0390941694636b14daf8949093600093919291606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561283c57600080fd5b505afa158015612850573d6000803e3d6000fd5b505050506040513d602081101561286657600080fd5b50515b6128ba576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c604482015290519081900360640190fd5b60006128c46148b6565b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561292e57600080fd5b505afa158015612942573d6000803e3d6000fd5b505050506040513d602081101561295857600080fd5b50519050818110156129b1576040805162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e6365000000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b031663a9059cbb856129cf85850387614a86565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b505050506040513d6020811015612a3f57600080fd5b5051612a92576040805162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b50505050565b60005a9050612aab888888888888614aa0565b3614612afe576040805162461bcd60e51b815260206004820152601960248201527f7472616e736d6974206d65737361676520746f6f206c6f6e6700000000000000604482015290519081900360640190fd5b612b06615086565b6040805160808082018352602b549081901b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252700100000000000000000000000000000000810464ffffffffff1660208301527501000000000000000000000000000000000000000000810460ff169282019290925276010000000000000000000000000000000000000000000090910463ffffffff166060808301919091529082526000908a908a90811015612bbf57600080fd5b813591602081013591810190606081016040820135640100000000811115612be657600080fd5b820183602082011115612bf857600080fd5b80359060200191846020830284011164010000000083111715612c1a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060408801525050506080840182905283515190925060589190911b907fffffffffffffffffffffffffffffffff00000000000000000000000000000000808316911614612ce1576040805162461bcd60e51b815260206004820152601560248201527f636f6e666967446967657374206d69736d617463680000000000000000000000604482015290519081900360640190fd5b608083015183516020015164ffffffffff808316911610612d49576040805162461bcd60e51b815260206004820152600c60248201527f7374616c65207265706f72740000000000000000000000000000000000000000604482015290519081900360640190fd5b83516040015160ff168911612da5576040805162461bcd60e51b815260206004820152601560248201527f6e6f7420656e6f756768207369676e6174757265730000000000000000000000604482015290519081900360640190fd5b601f891115612dfb576040805162461bcd60e51b815260206004820152601360248201527f746f6f206d616e79207369676e61747572657300000000000000000000000000604482015290519081900360640190fd5b868914612e4f576040805162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e0000604482015290519081900360640190fd5b601f8460400151511115612eaa576040805162461bcd60e51b815260206004820152601e60248201527f6e756d206f62736572766174696f6e73206f7574206f6620626f756e64730000604482015290519081900360640190fd5b83600001516040015160020260ff1684604001515111612f11576040805162461bcd60e51b815260206004820152601e60248201527f746f6f206665772076616c75657320746f207472757374206d656469616e0000604482015290519081900360640190fd5b8867ffffffffffffffff81118015612f2857600080fd5b506040519080825280601f01601f191660200182016040528015612f53576020820181803683370190505b50606085015260005b60ff81168a1115612fc457868160ff1660208110612f7657fe5b1a60f81b85606001518260ff1681518110612f8d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612f5c565b5083604001515167ffffffffffffffff81118015612fe157600080fd5b506040519080825280601f01601f19166020018201604052801561300c576020820181803683370190505b50602085015261301a6150ba565b60005b8560400151518160ff161015613120576000858260ff166020811061303e57fe5b1a90508281601f811061304d57fe5b6020020151156130a4576040805162461bcd60e51b815260206004820152601760248201527f6f6273657276657220696e646578207265706561746564000000000000000000604482015290519081900360640190fd5b6001838260ff16601f81106130b557fe5b91151560209283029190910152869060ff84169081106130d157fe5b1a60f81b87602001518360ff16815181106130e857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060010161301d565b503360009081526028602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561315e57fe5b600281111561316957fe5b905250905060028160200151600281111561318057fe5b1480156131b45750602a816000015160ff168154811061319c57fe5b6000918252602090912001546001600160a01b031633145b613205576040805162461bcd60e51b815260206004820152601860248201527f756e617574686f72697a6564207472616e736d69747465720000000000000000604482015290519081900360640190fd5b5050835164ffffffffff90911660209091015250506040516000908a908a90808383808284376040519201829003909120945061324693506150ba92505050565b61324e6150d9565b60005b898110156134475760006001858760600151848151811061326e57fe5b60209101015160f81c601b018e8e8681811061328657fe5b905060200201358d8d8781811061329957fe5b9050602002013560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156132f4573d6000803e3d6000fd5b505060408051601f198101516001600160a01b03811660009081526028602090815290849020838501909452835460ff8082168552929650929450840191610100900416600281111561334357fe5b600281111561334e57fe5b905250925060018360200151600281111561336557fe5b146133b7576040805162461bcd60e51b815260206004820152601e60248201527f61646472657373206e6f7420617574686f72697a656420746f207369676e0000604482015290519081900360640190fd5b8251849060ff16601f81106133c857fe5b60200201511561341f576040805162461bcd60e51b815260206004820152601460248201527f6e6f6e2d756e69717565207369676e6174757265000000000000000000000000604482015290519081900360640190fd5b600184846000015160ff16601f811061343457fe5b9115156020909202015250600101613251565b5050505060005b6001826040015151038110156134f85760008260400151826001018151811061347357fe5b602002602001015160170b8360400151838151811061348e57fe5b602002602001015160170b13159050806134ef576040805162461bcd60e51b815260206004820152601760248201527f6f62736572766174696f6e73206e6f7420736f72746564000000000000000000604482015290519081900360640190fd5b5060010161344e565b5060408101518051600091906002810490811061351157fe5b602002602001015190508060170b7f000000000000000000000000000000000000000000000000000000000000000060170b1315801561357757507f000000000000000000000000000000000000000000000000000000000000000060170b8160170b13155b6135c8576040805162461bcd60e51b815260206004820152601e60248201527f6d656469616e206973206f7574206f66206d696e2d6d61782072616e67650000604482015290519081900360640190fd5b81516060908101805163ffffffff60019091018116909152604080518082018252601785810b80835267ffffffffffffffff42811660208086019182528a5189015188166000908152602c82528781209651875493519094167801000000000000000000000000000000000000000000000000029390950b77ffffffffffffffffffffffffffffffffffffffffffffffff9081167fffffffffffffffff0000000000000000000000000000000000000000000000009093169290921790911691909117909355875186015184890151848a01516080808c015188519586523386890181905291860181905260a0988601898152845199870199909952835194909916997ff6a97944f31ea060dfde0566e4167c1a1082551e64b60ecb14d599a9d023d451998c999298949793969095909492939185019260c086019289820192909102908190849084905b8381101561372b578181015183820152602001613713565b50505050905001838103825285818151815260200191508051906020019080838360005b8381101561376757818101518382015260200161374f565b50505050905090810190601f1680156137945780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a281516060015160408051428152905160009263ffffffff16917f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271919081900360200190a381600001516060015163ffffffff168160170b7f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a36138498260000151606001518260170b614ab8565b5080518051602b8054602084015160408501516060909501517fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921660809490941c939093177fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000064ffffffffff90941693909302929092177fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000060ff90941693909302929092177fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000063ffffffff9283160217909155821061396a57fe5b613978828260200151614c28565b505050505050505050565b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156139ec57600080fd5b505afa158015613a00573d6000803e3d6000fd5b505050506040513d6020811015613a1657600080fd5b505190506000613a246148b6565b90910391505090565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff808216845285948401916101009004166002811115613a6f57fe5b6002811115613a7a57fe5b9052509050600081602001516002811115613a9157fe5b1415613aa1576000915050610ce0565b60016005826000015160ff16601f8110613ab757fe5b601091828204019190066002029054906101000a900461ffff1603915050919050565b600080808080333214613b34576040805162461bcd60e51b815260206004820152601460248201527f4f6e6c792063616c6c61626c6520627920454f41000000000000000000000000604482015290519081900360640190fd5b5050602b5463ffffffff760100000000000000000000000000000000000000000000820481166000908152602c6020526040902054608083901b96700100000000000000000000000000000000909304600881901c909216955064ffffffffff9091169350601781900b92507801000000000000000000000000000000000000000000000000900467ffffffffffffffff1690565b6003546001600160a01b031690565b6000546001600160a01b03163314613c37576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b60408051808201909152602e546001600160a01b038082168084527401000000000000000000000000000000000000000090920463ffffffff1660208401528416141580613c9557508163ffffffff16816020015163ffffffff1614155b15613d68576040805180820182526001600160a01b0385811680835263ffffffff8681166020948501819052602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001684177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000008302179055865187860151875193168352948201528451919493909216927fb04e3a37abe9c0fcdfebdeae019a8e2b12ddf53f5d55ffb0caccc1bedaca1541928290030190a35b505050565b6001600160a01b03828116600090815260076020526040902054163314613ddb576040805162461bcd60e51b815260206004820152601d60248201527f6f6e6c792063757272656e742070617965652063616e20757064617465000000604482015290519081900360640190fd5b336001600160a01b0382161415613e39576040805162461bcd60e51b815260206004820152601760248201527f63616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015290519081900360640190fd5b6001600160a01b03808316600090815260086020526040902080548383167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255909116908114613d68576040516001600160a01b038084169133918616907f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836790600090a4505050565b6000546001600160a01b03163314613f27576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000546001600160a01b03163314613fef576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015290519081900360640190fd5b611db681614e75565b602b54760100000000000000000000000000000000000000000000900463ffffffff166000818152602c6020908152604091829020825180840190935254601781810b810b810b808552780100000000000000000000000000000000000000000000000090920467ffffffffffffffff1693909201839052929392900b9181908490565b6040805160a08101825260025463ffffffff80821683526401000000008204811660208401526801000000000000000082048116838501526c0100000000000000000000000082048116606084015270010000000000000000000000000000000090910416608082015260035482516103e081019384905291926001600160a01b0390911691600091600590601f908285855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161410f575050604080516103e0810191829052959650600095945060099350601f9250905082845b81548152602001906001019080831161416957505050505090506000602a8054806020026020016040519081016040528092919081815260200182805480156141db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116141bd575b5050505050905060005b815181101561441057600060018483601f81106141fe57fe5b6020020151039050600060018684601f811061421657fe5b60200201510361ffff169050600082896060015163ffffffff168302633b9aca000201905060008111156144055760006007600087878151811061425657fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050886001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156142eb57600080fd5b505af11580156142ff573d6000803e3d6000fd5b505050506040513d602081101561431557600080fd5b5051614368576040805162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b60018886601f811061437657fe5b61ffff909216602092909202015260018786601f811061439257fe5b602002018181525050886001600160a01b0316816001600160a01b03168787815181106143bb57fe5b60200260200101516001600160a01b03167fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c856040518082815260200191505060405180910390a4505b5050506001016141e5565b5061441e600584601f6150f0565b50612787600983601f615186565b6001600160a01b03811660009081526028602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561447257fe5b600281111561447d57fe5b9052509050600061448d83610b9a565b90508015613d68576001600160a01b0380841660009081526007602090815260408083205460035482517fa9059cbb000000000000000000000000000000000000000000000000000000008152918616600483018190526024830188905292519295169363a9059cbb9360448084019491939192918390030190829087803b15801561451857600080fd5b505af115801561452c573d6000803e3d6000fd5b505050506040513d602081101561454257600080fd5b5051614595576040805162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b60016005846000015160ff16601f81106145ab57fe5b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060016009846000015160ff16601f81106145e657fe5b01556003546040805184815290516001600160a01b039283169284811692908816917fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c9181900360200190a450505050565b60008a8a8a8a8a8a8a8a8a8a604051602001808b6001600160a01b031681526020018a67ffffffffffffffff16815260200180602001806020018760ff1681526020018667ffffffffffffffff1681526020018060200184810384528c8c82818152602001925060200280828437600083820152601f01601f191690910185810384528a8152602090810191508b908b0280828437600083820152601f01601f191690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509d50505050505050505050505050506040516020818303038152906040528051906020012090509a9950505050505050505050565b6040805160a0808201835263ffffffff88811680845288821660208086018290528984168688018190528985166060808901829052958a166080988901819052600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001687177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008702177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000008502177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000008402177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000830217905589519586529285019390935283880152928201529283015291517fd0d9486a2c673e2a4b57fc82e4c8a556b3e2b82dd5db07e2c04a920ca0f469b6929181900390910190a15050505050565b604080516103e0810191829052600091829190600590601f908285855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116148d35790505050505050905060005b601f8110156149435760018282601f811061492c57fe5b60200201510361ffff169290920191600101614915565b506040805160a08101825260025463ffffffff8082168352640100000000820481166020808501919091526801000000000000000083048216848601526c0100000000000000000000000083048216606085018190527001000000000000000000000000000000009093049091166080840152602a805485518184028101840190965280865296909202633b9aca0002959293600093909291830182828015614a1557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116149f7575b5050604080516103e0810191829052949550600094935060099250601f915082845b815481526020019060010190808311614a37575050505050905060005b8251811015614a7e5760018282601f8110614a6b57fe5b6020020151039590950194600101614a54565b505050505090565b600081831015614a97575081614a9a565b50805b92915050565b602083810286019082020160e4019695505050505050565b60408051808201909152602e546001600160a01b0381168083527401000000000000000000000000000000000000000090910463ffffffff166020830152614b0057506110c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff8181166000818152602c60209081526040918290205486820151875184516024810196909652601792830b90920b604486018190528a8716606487015260848087018b90528551808803909101815260a490960190945291840180517fbeed9b51000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790529193614bd79391169190614f04565b6123ce576040805162461bcd60e51b815260206004820152601060248201527f696e73756666696369656e742067617300000000000000000000000000000000604482015290519081900360640190fd5b3360009081526028602090815260408083208151808301909252805460ff80821684529293919291840191610100909104166002811115614c6557fe5b6002811115614c7057fe5b9052506040805160a08101825260025463ffffffff80821683526401000000008204811660208401526801000000000000000082048116838501526c0100000000000000000000000082048116606084015270010000000000000000000000000000000090910416608082015281516103e081019283905292935091614d4091859190600590601f90826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411614cfe5790505050505050614f40565b614d4e90600590601f6150f0565b50600282602001516002811115614d6157fe5b14614db3576040805162461bcd60e51b815260206004820181905260248201527f73656e7420627920756e64657369676e61746564207472616e736d6974746572604482015290519081900360640190fd5b6000614dda633b9aca003a04836020015163ffffffff16846000015163ffffffff16614fb5565b90506010360260005a90506000614df98863ffffffff16858585614fdb565b6fffffffffffffffffffffffffffffffff1690506000620f4240866040015163ffffffff16830281614e2757fe5b049050856080015163ffffffff16633b9aca0002816009896000015160ff16601f8110614e5057fe5b015401016009886000015160ff16601f8110614e6857fe5b0155505050505050505050565b6004546001600160a01b0390811690821681146110c157600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03848116918217909255604080519284168352602083019190915280517f793cb73064f3c8cde7e187ae515511e6e56d1ee89bf08b82fa60fb70f8d489129281900390910190a15050565b60005a6113888110614f385761138881039050846040820482031115614f38576000808451602086016000888af150600191505b509392505050565b614f486150ba565b60005b8351811015614fad576000848281518110614f6257fe5b016020015160f81c9050614f878482601f8110614f7b57fe5b60200201516001615067565b848260ff16601f8110614f9657fe5b61ffff909216602092909202015250600101614f4b565b509092915050565b60008383811015614fc857600285850304015b614fd28184614a86565b95945050505050565b600081851015615032576040805162461bcd60e51b815260206004820181905260248201527f6761734c6566742063616e6e6f742065786365656420696e697469616c476173604482015290519081900360640190fd5b818503830161179301633b9aca00858202026fffffffffffffffffffffffffffffffff811061505d57fe5b9695505050505050565b600061507f8261ffff168461ffff160161ffff614a86565b9392505050565b6040518060a001604052806150996151b4565b81526060602082018190526040820181905280820152600060809091015290565b604051806103e00160405280601f906020820280368337509192915050565b604080518082019091526000808252602082015290565b6002830191839082156151765791602002820160005b8382111561514657835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302615106565b80156151745782816101000a81549061ffff0219169055600201602081600101049283019260010302615146565b505b506151829291506151db565b5090565b82601f8101928215615176579160200282015b82811115615176578251825591602001919060010190615199565b60408051608081018252600080825260208201819052918101829052606081019190915290565b5b8082111561518257600081556001016151dc56fe6f7261636c6520616464726573736573206f7574206f6620726567697374726174696f6ea164736f6c6343000706000a0000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000d2634c5d53c2921567ecacbcd1922dbf18aeaf0f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000854657374204f4352000000000000000000000000000000000000000000000000