0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80635c975abb11610104578063a38807f2116100a2578063d21220a711610071578063d21220a71461087e578063ddca3f4314610886578063f3058399146108a6578063f30dba93146108ae576101da565b8063a38807f2146107f4578063a7b23b391461084f578063c45a015514610857578063d0c93a7c1461085f576101da565b80638456cb59116100de5780638456cb591461066e57806385b6672914610676578063883bdbfd146106b3578063a34123a7146107ba576101da565b80635c975abb1461062257806370cf754a1461063e5780638206a4d114610646576101da565b80633c8a7d8d1161017c5780634b58ae361161014b5780634b58ae361461052a5780634f1eb3d814610558578063514ea4bf146105a95780635339c29614610602576101da565b80633c8a7d8d146103de5780633f4ba83a1461047e5780634614131914610486578063490e6cbc146104a0576101da565b80631ad8b03b116101b85780631ad8b03b146102d4578063252c09d71461030b57806332148f67146103625780633850c7bd14610385576101da565b80630dfe1681146101df578063128acb08146102035780631a686502146102b0575b600080fd5b6101e7610930565b604080516001600160a01b039092168252519081900360200190f35b610297600480360360a081101561021957600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b81111561025957600080fd5b82018360208201111561026b57600080fd5b803590602001918460018302840111600160201b8311171561028c57600080fd5b509092509050610954565b6040805192835260208301919091528051918290030190f35b6102b86122e8565b604080516001600160801b039092168252519081900360200190f35b6102dc6122f7565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6103286004803603602081101561032157600080fd5b5035612311565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103836004803603602081101561037857600080fd5b503561ffff16612357565b005b61038d6124d5565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b610297600480360360a08110156103f457600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b81111561044057600080fd5b82018360208201111561045257600080fd5b803590602001918460018302840111600160201b8311171561047357600080fd5b509092509050612525565b610383612bd8565b61048e612c7b565b60408051918252519081900360200190f35b610383600480360360808110156104b657600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156104ec57600080fd5b8201836020820111156104fe57600080fd5b803590602001918460018302840111600160201b8311171561051f57600080fd5b509092509050612c81565b6103836004803603604081101561054057600080fd5b506001600160a01b0381358116916020013516613675565b6102dc600480360360a081101561056e57600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b03606082013581169160800135166137fc565b6105c6600480360360208110156105bf57600080fd5b5035613d74565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61048e6004803603602081101561061857600080fd5b503560010b613db1565b61062a613dc3565b604080519115158252519081900360200190f35b6102b8613dcc565b6103836004803603604081101561065c57600080fd5b5060ff81358116916020013516613df0565b610383613fd4565b6102dc6004803603606081101561068c57600080fd5b506001600160a01b03813516906001600160801b0360208201358116916040013516614075565b610721600480360360208110156106c957600080fd5b810190602081018135600160201b8111156106e357600080fd5b8201836020820111156106f557600080fd5b803590602001918460208302840111600160201b8311171561071657600080fd5b5090925090506143c8565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561076557818101518382015260200161074d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156107a457818101518382015260200161078c565b5050505090500194505050505060405180910390f35b610297600480360360608110156107d057600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316614458565b61081e6004803603604081101561080a57600080fd5b508035600290810b9160200135900b614889565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101e7614a7a565b6101e7614a8c565b610867614ab0565b6040805160029290920b8252519081900360200190f35b6101e7614ad4565b61088e614af8565b6040805162ffffff9092168252519081900360200190f35b61048e614b1c565b6108ce600480360360208110156108c457600080fd5b503560020b614b22565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b7f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe81565b60008061095f614bfa565b60408051634d8c928d60e11b815233600482015290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691639b19251a916024808301926020929190829003018186803b1580156109c557600080fd5b505afa1580156109d9573d6000803e3d6000fd5b505050506040513d60208110156109ef57600080fd5b5051156116b75763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b158015610a4457600080fd5b505afa158015610a58573d6000803e3d6000fd5b505050506040513d6020811015610a6e57600080fd5b505115610a7a57600080fd5b85610ab1576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052610b6a576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610bb55780600001516001600160a01b0316866001600160a01b0316118015610bb0575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610be7565b80600001516001600160a01b0316866001600160a01b0316108015610be757506401000276a36001600160a01b038716115b610c1e576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6001805460ff60f01b191690556040805160c08101909152600090808a610c505760048460a0015160ff16901c610c63565b60108460a0015160ff1681610c6157fe5b065b60ff1681526005546001600160801b03166020820152604001610c84614c2f565b63ffffffff168152602001600060060b815260200160006001600160a01b0316815260200160001515815250905060006040518060e001604052808a81526020016000815260200184600001516001600160a01b03168152602001846020015160020b81526020018b610cf957600354610cfd565b6002545b815260006020808301919091528401516001600160801b031660409091015260608101519091505b815115801590610d4b5750886001600160a01b031682604001516001600160a01b031614155b156111c957610d58617695565b60408301516001600160a01b031681526060830151610d9b906007907f00000000000000000000000000000000000000000000000000000000000000c88f614c33565b15156040830152600290810b810b60208301819052620d89e719910b1215610dcc57620d89e7196020820152610deb565b6020810151620d89e860029190910b1315610deb57620d89e860208201525b610df88160200151614d75565b6001600160a01b031660608201526040830151610e89908d610e32578b6001600160a01b031683606001516001600160a01b031611610e4c565b8b6001600160a01b031683606001516001600160a01b0316105b610e5a578260600151610e5c565b8b5b60c086015186517f00000000000000000000000000000000000000000000000000000000000027106150a6565b60c085015260a084015260808301526001600160a01b0316604084015260008b1315610eee57610ec28160c00151826080015101615298565b835103835260a0810151610ee490610ed990615298565b6020850151906152ae565b6020840152610f29565b610efb8160a00151615298565b835101835260c08101516080820151610f2391610f189101615298565b6020850151906152ca565b60208401525b835160ff1615610f6f576000846000015160ff168260c0015181610f4957fe5b60c0840180519290910491829003905260a0850180519091016001600160801b03169052505b60c08301516001600160801b031615610fae57610fa28160c00151600160801b8560c001516001600160801b03166152e0565b60808401805190910190525b80606001516001600160a01b031683604001516001600160a01b031614156110d7578060400151156110ae578360a0015161103857611016846040015160008760200151886040015188602001518a606001516009615390909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b600061108482602001518e61104f57600254611055565b85608001515b8f611064578660800151611068565b6003545b608089015160608a015160408b01516006959493929190615523565b90508c15611090576000035b61109e8460c00151826155dd565b6001600160801b031660c0850152505b8b6110bd5780602001516110c6565b60018160200151035b600290810b900b6060840152611112565b80600001516001600160a01b031683604001516001600160a01b031614611112576111058360400151615693565b600290810b900b60608401525b8b151560008c131461112c57602083015183518c03611139565b82600001518b0383602001515b90975095506000871361114d57600061114f565b865b965060008613611160576000611162565b855b95507fd454fe69884b587152d46ec7d278d92b47b8740a28197d0d8c11861413f85f168787848660600151604051808581526020018481526020018360020b81526020018260020b815260200194505050505060405180910390a150506060810151610d25565b836020015160020b826060015160020b146112975760008061121786604001518660400151886020015188602001518a606001518b6080015160096159ae909695949392919063ffffffff16565b604086015160608701516001805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506112bc9050565b6040820151600180546001600160a01b0319166001600160a01b039092169190911790555b8160c001516001600160801b031683602001516001600160801b0316146113025760c0820151600580546001600160801b0319166001600160801b039092169190911790555b8a1561135257608082015160025560a08201516001600160801b03161561134d5760a0820151600480546001600160801b031981166001600160801b03918216909301169190911790555b611398565b608082015160035560a08201516001600160801b0316156113985760a0820151600480546001600160801b03808216600160801b92839004821690940116029190911790555b8a151560008b13146113b257602082015182518b036113bf565b81600001518a0382602001515b90965094508a156114f8576000851215611401576114017f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b178d87600003615b4b565b600061140b615c99565b9050336001600160a01b0316635aec26c988888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b505050506114af615c99565b6114b98289615dd2565b11156114f2576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611622565b600086121561152f5761152f7f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe8d88600003615b4b565b6000611539615de2565b9050336001600160a01b0316635aec26c988888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b505050506115dd615de2565b6115e78288615dd2565b1115611620576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408083015160c084015160608086015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506001805460ff60f01b1916600160f01b179055506122dd9050565b6116bf613dc3565b6122dd5763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561171157600080fd5b505afa158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50511561174757600080fd5b8561177e576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052611837576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b876118825780600001516001600160a01b0316866001600160a01b031611801561187d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b6118b4565b80600001516001600160a01b0316866001600160a01b03161080156118b457506401000276a36001600160a01b038716115b6118eb576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6001805460ff60f01b191690556040805160c08101909152600090808a61191d5760048460a0015160ff16901c611930565b60108460a0015160ff168161192e57fe5b065b60ff1681526005546001600160801b03166020820152604001611951614c2f565b63ffffffff168152602001600060060b815260200160006001600160a01b0316815260200160001515815250905060006040518060e001604052808a81526020016000815260200184600001516001600160a01b03168152602001846020015160020b81526020018b6119c6576003546119ca565b6002545b815260006020808301919091528401516001600160801b031660409091015260608101519091505b815115801590611a185750886001600160a01b031682604001516001600160a01b031614155b15611df457611a25617695565b60408301516001600160a01b031681526060830151611a68906007907f00000000000000000000000000000000000000000000000000000000000000c88f614c33565b15156040830152600290810b810b60208301819052620d89e719910b1215611a9957620d89e7196020820152611ab8565b6020810151620d89e860029190910b1315611ab857620d89e860208201525b611ac58160200151614d75565b6001600160a01b031660608201526040830151611aff908d610e32578b6001600160a01b031683606001516001600160a01b031611610e4c565b60c085015260a084015260808301526001600160a01b0316604084015260008b1315611b5957611b388160c00151826080015101615298565b835103835260a0810151611b4f90610ed990615298565b6020840152611b89565b611b668160a00151615298565b835101835260c08101516080820151611b8391610f189101615298565b60208401525b835160ff1615611bcf576000846000015160ff168260c0015181611ba957fe5b60c0840180519290910491829003905260a0850180519091016001600160801b03169052505b60c08301516001600160801b031615611c0e57611c028160c00151600160801b8560c001516001600160801b03166152e0565b60808401805190910190525b80606001516001600160a01b031683604001516001600160a01b03161415611d0257806040015115611cd9578360a00151611c9857611c76846040015160008760200151886040015188602001518a606001516009615390909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000611caf82602001518e61104f57600254611055565b90508c15611cbb576000035b611cc98460c00151826155dd565b6001600160801b031660c0850152505b8b611ce8578060200151611cf1565b60018160200151035b600290810b900b6060840152611d3d565b80600001516001600160a01b031683604001516001600160a01b031614611d3d57611d308360400151615693565b600290810b900b60608401525b8b151560008c1314611d5757602083015183518c03611d64565b82600001518b0383602001515b909750955060008713611d78576000611d7a565b865b965060008613611d8b576000611d8d565b855b95507fd454fe69884b587152d46ec7d278d92b47b8740a28197d0d8c11861413f85f168787848660600151604051808581526020018481526020018360020b81526020018260020b815260200194505050505060405180910390a1505060608101516119f2565b836020015160020b826060015160020b14611ec257600080611e4286604001518660400151886020015188602001518a606001518b6080015160096159ae909695949392919063ffffffff16565b604086015160608701516001805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b0390911617905550611ee79050565b6040820151600180546001600160a01b0319166001600160a01b039092169190911790555b8160c001516001600160801b031683602001516001600160801b031614611f2d5760c0820151600580546001600160801b0319166001600160801b039092169190911790555b8a15611f7d57608082015160025560a08201516001600160801b031615611f785760a0820151600480546001600160801b031981166001600160801b03918216909301169190911790555b611fc3565b608082015160035560a08201516001600160801b031615611fc35760a0820151600480546001600160801b03808216600160801b92839004821690940116029190911790555b8a151560008b1314611fdd57602082015182518b03611fea565b81600001518a0382602001515b90965094508a1561212357600085121561202c5761202c7f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b178d87600003615b4b565b6000612036615c99565b9050336001600160a01b0316635aec26c988888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156120ba57600080fd5b505af11580156120ce573d6000803e3d6000fd5b505050506120da615c99565b6120e48289615dd2565b111561211d576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b5061224d565b600086121561215a5761215a7f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe8d88600003615b4b565b6000612164615de2565b9050336001600160a01b0316635aec26c988888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156121e857600080fd5b505af11580156121fc573d6000803e3d6000fd5b50505050612208615de2565b6122128288615dd2565b111561224b576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408083015160c084015160608086015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506001805460ff60f01b1916600160f01b17905550505b965096945050505050565b6005546001600160801b031681565b6004546001600160801b0380821691600160801b90041682565b60098162ffffff811061232357600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600154600160f01b900460ff1661239b576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b191690556123b0614bfa565b63010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d602081101561242857600080fd5b50511561243457600080fd5b600154600160d81b900461ffff16600061245060098385615e7a565b6001805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146124bd576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506001805460ff60f01b1916600160f01b17905550565b6001546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b6001546000908190600160f01b900460ff1661256e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051634d8c928d60e11b815233600482015290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691639b19251a916024808301926020929190829003018186803b1580156125e157600080fd5b505afa1580156125f5573d6000803e3d6000fd5b505050506040513d602081101561260b57600080fd5b5051156128e65763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561266057600080fd5b505afa158015612674573d6000803e3d6000fd5b505050506040513d602081101561268a57600080fd5b50511561269657600080fd5b6000856001600160801b0316116126ac57600080fd5b6000806126fa60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016126f08a6001600160801b0316615f1e565b600f0b9052615f2f565b9250925050819350809250600080600086111561271c57612719615c99565b91505b841561272d5761272a615de2565b90505b336001600160a01b0316630a7215dd87878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156127af57600080fd5b505af11580156127c3573d6000803e3d6000fd5b50505050600086111561281a576127d8615c99565b6127e28388615dd2565b111561281a576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561286a57612828615de2565b6128328287615dd2565b111561286a576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450505050612bb8565b6128ee613dc3565b612bb85763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561294057600080fd5b505afa158015612954573d6000803e3d6000fd5b505050506040513d602081101561296a57600080fd5b50511561297657600080fd5b6000856001600160801b03161161298c57600080fd5b6000806129d060405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016126f08a6001600160801b0316615f1e565b925092505081935080925060008060008611156129f2576129ef615c99565b91505b8415612a0357612a00615de2565b90505b336001600160a01b0316630a7215dd87878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015612a8557600080fd5b505af1158015612a99573d6000803e3d6000fd5b505050506000861115612af057612aae615c99565b612ab88388615dd2565b1115612af0576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8415612b4057612afe615de2565b612b088287615dd2565b1115612b40576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a4505050505b6001805460ff60f01b1916600160f01b1790559097909650945050505050565b7f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9226001600160a01b0316630f41e0d26040518163ffffffff1660e01b815260040160206040518083038186803b158015612c3157600080fd5b505afa158015612c45573d6000803e3d6000fd5b505050506040513d6020811015612c5b57600080fd5b50516001600160a01b03163314612c7157600080fd5b612c7961616f565b565b60035481565b600154600160f01b900460ff16612cc5576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b19169055612cda614bfa565b60408051634d8c928d60e11b815233600482015290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691639b19251a916024808301926020929190829003018186803b158015612d4057600080fd5b505afa158015612d54573d6000803e3d6000fd5b505050506040513d6020811015612d6a57600080fd5b5051156131e25763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b158015612dbf57600080fd5b505afa158015612dd3573d6000803e3d6000fd5b505050506040513d6020811015612de957600080fd5b505115612df557600080fd5b6005546001600160801b031680612e37576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6000612e6c867f000000000000000000000000000000000000000000000000000000000000271062ffffff16620f424061620f565b90506000612ea3867f000000000000000000000000000000000000000000000000000000000000271062ffffff16620f424061620f565b90506000612eaf615c99565b90506000612ebb615de2565b90508815612eee57612eee7f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe8b8b615b4b565b8715612f1f57612f1f7f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b178b8a615b4b565b336001600160a01b031663f6b07e3085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b505050506000612fc3615c99565b90506000612fcf615de2565b905081612fdc8588615dd2565b1115613014576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b8061301f8487615dd2565b1115613057576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b83820383820381156130e657600154600160e81b9004600f166000811561308a578160ff16848161308457fe5b0461308d565b60005b90506001600160801b038116156130c057600480546001600160801b038082168401166001600160801b03199091161790555b6130da818503600160801b8d6001600160801b03166152e0565b60028054909101905550505b801561317157600154600160e81b900460041c600f1660008115613116578160ff16838161311057fe5b04613119565b60005b90506001600160801b0381161561314b57600480546001600160801b03600160801b8083048216850182160291161790555b613165818403600160801b8d6001600160801b03166152e0565b60038054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350505050505050505061365b565b6131ea613dc3565b61365b5763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561323c57600080fd5b505afa158015613250573d6000803e3d6000fd5b505050506040513d602081101561326657600080fd5b50511561327257600080fd5b6005546001600160801b0316806132b4576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006132e9867f000000000000000000000000000000000000000000000000000000000000271062ffffff16620f424061620f565b90506000613320867f000000000000000000000000000000000000000000000000000000000000271062ffffff16620f424061620f565b9050600061332c615c99565b90506000613338615de2565b9050881561336b5761336b7f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe8b8b615b4b565b871561339c5761339c7f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b178b8a615b4b565b336001600160a01b031663f6b07e3085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b505050506000613440615c99565b9050600061344c615de2565b9050816134598588615dd2565b1115613491576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b8061349c8487615dd2565b11156134d4576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b838203838203811561356357600154600160e81b9004600f1660008115613507578160ff16848161350157fe5b0461350a565b60005b90506001600160801b0381161561353d57600480546001600160801b038082168401166001600160801b03199091161790555b613557818503600160801b8d6001600160801b03166152e0565b60028054909101905550505b80156135ee57600154600160e81b900460041c600f1660008115613593578160ff16838161358d57fe5b04613596565b60005b90506001600160801b038116156135c857600480546001600160801b03600160801b8083048216850182160291161790555b6135e2818403600160801b8d6001600160801b03166152e0565b60038054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505b50506001805460ff60f01b1916600160f01b179055505050565b6001546001600160a01b0316156136b8576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b60006136c383615693565b90506000806136db6136d3614c2f565b600990616249565b6040805160e0810182526001600160a01b03808a16808352600289810b6020808601829052600086880181905261ffff808b166060808a01829052918b1660808a0181905260a08a0193909352600160c0909901899052885461ffff60e81b19600160d81b90940261ffff60d81b19600160c81b90930263ffffffff60b81b199888900b62ffffff16600160a01b0262ffffff60a01b196001600160a01b03199485168c1716179890981697909717919091169590951791909116600160f01b17909655630100000880548e87169416939093179283905586519384528301529091168184015291519395509193507f37c11b03ede5fdb795cfadefd80628f5f97d99be7f4a4b491b8dbec7ce3ade13929081900390910190a15050505050565b6001546000908190600160f01b900460ff16613845576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051634d8c928d60e11b815233600482015290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691639b19251a916024808301926020929190829003018186803b1580156138b857600080fd5b505afa1580156138cc573d6000803e3d6000fd5b505050506040513d60208110156138e257600080fd5b505115613b1b5763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561393757600080fd5b505afa15801561394b573d6000803e3d6000fd5b505050506040513d602081101561396157600080fd5b50511561396d57600080fd5b600061397c6008338989616295565b60038101549091506001600160801b039081169086161161399d57846139ac565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b9091048116908516116139d457836139ea565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615613a4f576003810180546001600160801b031981166001600160801b03918216869003821617909155613a4f907f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe908a908616615b4b565b6001600160801b03821615613ab5576003810180546001600160801b03600160801b808304821686900382160291811691909117909155613ab5907f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b17908a908516615b4b565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a450613d55565b613b23613dc3565b613d555763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b158015613b7557600080fd5b505afa158015613b89573d6000803e3d6000fd5b505050506040513d6020811015613b9f57600080fd5b505115613bab57600080fd5b6000613bba6008338989616295565b60038101549091506001600160801b0390811690861611613bdb5784613bea565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611613c125783613c28565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615613c8d576003810180546001600160801b031981166001600160801b03918216869003821617909155613c8d907f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe908a908616615b4b565b6001600160801b03821615613cf3576003810180546001600160801b03600160801b808304821686900382160291811691909117909155613cf3907f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b17908a908516615b4b565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4505b6001805460ff60f01b1916600160f01b17905590969095509350505050565b60086020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60076020526000908152604090205481565b60005460ff1690565b7f00000000000000000000000000000000000762d10ef955d55b7d038c7a7231cc81565b600154600160f01b900460ff16613e34576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051636999b37760e01b815290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691636999b377916004808301926020929190829003018186803b158015613ea157600080fd5b505afa158015613eb5573d6000803e3d6000fd5b505050506040513d6020811015613ecb57600080fd5b50516001600160a01b03163314613ee157600080fd5b60ff82161580613f04575060048260ff1610158015613f045750600a8260ff1611155b8015613f2e575060ff81161580613f2e575060048160ff1610158015613f2e5750600a8160ff1611155b613f3757600080fd5b60018054610ff0600484901b16840160ff908116600160e81b90810260ff60e81b19841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506001805460ff60f01b1916600160f01b17905550565b7f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9226001600160a01b0316630f41e0d26040518163ffffffff1660e01b815260040160206040518083038186803b15801561402d57600080fd5b505afa158015614041573d6000803e3d6000fd5b505050506040513d602081101561405757600080fd5b50516001600160a01b0316331461406d57600080fd5b612c796162f9565b6001546000908190600160f01b900460ff166140be576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051636999b37760e01b815290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691636999b377916004808301926020929190829003018186803b15801561412b57600080fd5b505afa15801561413f573d6000803e3d6000fd5b505050506040513d602081101561415557600080fd5b50516001600160a01b0316331461416b57600080fd5b63010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b1580156141b957600080fd5b505afa1580156141cd573d6000803e3d6000fd5b505050506040513d60208110156141e357600080fd5b5051156141ef57600080fd5b6004546001600160801b039081169085161161420b5783614218565b6004546001600160801b03165b6004549092506001600160801b03600160801b90910481169084161161423e5782614252565b600454600160801b90046001600160801b03165b90506001600160801b038216156142d3576004546001600160801b038381169116141561428157600019909101905b600480546001600160801b031981166001600160801b039182168590038216179091556142d3907f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe9087908516615b4b565b6001600160801b03811615614359576004546001600160801b03828116600160801b90920416141561430457600019015b600480546001600160801b03600160801b808304821685900382160291811691909117909155614359907f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b179087908416615b4b565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36001805460ff60f01b1916600160f01b1790559094909350915050565b6060806143d3614bfa565b61444d6143de614c2f565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600554600995949350600160a01b820460020b925061ffff600160b81b83048116926001600160801b0390921691600160c81b90041661637c565b915091509250929050565b6001546000908190600160f01b900460ff166144a1576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6001805460ff60f01b1916905560408051634d8c928d60e11b815233600482015290516001600160a01b037f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea9221691639b19251a916024808301926020929190829003018186803b15801561451457600080fd5b505afa158015614528573d6000803e3d6000fd5b505050506040513d602081101561453e57600080fd5b5051156146db5763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561459357600080fd5b505afa1580156145a7573d6000803e3d6000fd5b505050506040513d60208110156145bd57600080fd5b5051156145c957600080fd5b600080600061461c6040518060800160405280336001600160a01b031681526020018a60020b81526020018960020b815260200161460f896001600160801b0316615f1e565b600003600f0b9052615f2f565b925092509250816000039450806000039350600085118061463d5750600084115b1561467c576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450505061486c565b6146e3613dc3565b61486c5763010000085460408051633371bfff60e01b815233600482015290516001600160a01b0390921691633371bfff91602480820192602092909190829003018186803b15801561473557600080fd5b505afa158015614749573d6000803e3d6000fd5b505050506040513d602081101561475f57600080fd5b50511561476b57600080fd5b60008060006147b16040518060800160405280336001600160a01b031681526020018a60020b81526020018960020b815260200161460f896001600160801b0316615f1e565b92509250925081600003945080600003935060008511806147d25750600084115b15614811576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a45050505b6001805460ff60f01b1916600160f01b1790559094909350915050565b6000806000614896614bfa565b6148a085856164d6565b600285810b810b600090815260066020819052604080832088850b90940b8352822060038401549182900b93600160381b83046001600160a01b0316928492600160d81b820463ffffffff16928492909190600160f81b900460ff168061490657600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061494757600080fd5b50506040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b121590506149f057509390940396509003935090039050614a73565b8a60020b816020015160020b1215614a64576000614a0c614c2f565b6020830151604084015160055460608601519394506000938493614a42936009938893879392916001600160801b031690615390565b9a9003989098039b505094909603929092039650909103039250614a73915050565b50949093039650039350900390505b9250925092565b6301000008546001600160a01b031681565b7f00000000000000000000000076e84be4a99b2bd0d2364c837ce66421639ea92281565b7f00000000000000000000000000000000000000000000000000000000000000c881565b7f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b1781565b7f000000000000000000000000000000000000000000000000000000000000271081565b60025481565b60066020819052600091825260409091208054600182015460028301546003909301546001600160801b03831694600160801b909304600f0b93919281900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b60008082600281900b620d89e71981614ba357fe5b05029050600083600281900b620d89e881614bba57fe5b0502905060008460020b83830360020b81614bd157fe5b0560010190508062ffffff166001600160801b03801681614bee57fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000038bae1ec1909a0d50ff311b919f5e39c6bb7e6881614612c7957600080fd5b4290565b60008060008460020b8660020b81614c4757fe5b05905060008660020b128015614c6e57508460020b8660020b81614c6757fe5b0760020b15155b15614c7857600019015b8315614ced57600080614c8a8361659f565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085614ccf57888360ff16860302614ce2565b88614cd9826165b1565b840360ff168603025b965050505050614d6b565b600080614cfc8360010161659f565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085614d4e57888360ff0360ff16866001010102614d64565b8883614d5983616650565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12614d8c578260020b614d94565b8260020b6000035b9050620d89e8811115614dd2576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216614de657600160801b614df8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614e2c576ffff97272373d413259a46990580e213a0260801c5b6004821615614e4b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614e6a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614e89576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614ea8576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615614ec7576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614ee6576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614f06576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614f26576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614f46576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614f66576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614f86576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614fa6576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614fc6576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614fe6576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615615007576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615615027576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615615046576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615615063576b048a170391f7dc42444e8fa20260801c5b60008460020b131561507e57806000198161507a57fe5b0490505b600160201b810615615091576001615094565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061512b5760006150df8989620f42400362ffffff16620f42406152e0565b9050826150f8576150f38c8c8c600161673a565b615105565b6151058b8d8c60016167b5565b9550858110615116578a9650615125565b6151228c8b8386616860565b96505b50615175565b816151425761513d8b8b8b60006167b5565b61514f565b61514f8a8c8b600061673a565b935083886000031061516357899550615175565b6151728b8a8a600003856168ac565b95505b6001600160a01b038a81169087161482156151d8578080156151945750815b6151aa576151a5878d8c60016167b5565b6151ac565b855b95508080156151b9575081155b6151cf576151ca878d8c600061673a565b6151d1565b845b9450615222565b8080156151e25750815b6151f8576151f38c888c600161673a565b6151fa565b855b9550808015615207575081155b61521d576152188c888c60006167b5565b61521f565b845b94505b8115801561523257508860000385115b1561523e578860000394505b81801561525d57508a6001600160a01b0316876001600160a01b031614155b1561526c578589039350615289565b615286868962ffffff168a620f42400362ffffff1661620f565b93505b50505095509550955095915050565b6000600160ff1b82106152aa57600080fd5b5090565b808203828113156000831215146152c457600080fd5b92915050565b818101828112156000831215146152c457600080fd5b6000808060001985870986860292508281109083900303905080615316576000841161530b57600080fd5b508290049050615389565b80841161532257600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716615437576000898661ffff1662ffffff81106153b257fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461542357615420818a89886168f8565b90505b806020015181604001519250925050615517565b86880360008061544c8c8c858c8c8c8c61699b565b91509150816000015163ffffffff168363ffffffff16141561547e578160200151826040015194509450505050615517565b805163ffffffff848116911614156154a6578060200151816040015194509450505050615517565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816154d457fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161550657fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402600160381b600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561564257826001600160801b03168260000384039150816001600160801b03161061563d576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6152c4565b826001600160801b03168284019150816001600160801b031610156152c4576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906156cf575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b615704576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061579857607f810383901c91506157a2565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461599f57886001600160a01b031661598382614d75565b6001600160a01b03161115615998578161599a565b805b6159a1565b815b9998505050505050505050565b6000806000898961ffff1662ffffff81106159c557fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415615a345788859250925050615517565b8461ffff168461ffff16118015615a5557506001850361ffff168961ffff16145b15615a6257839150615a66565b8491505b8161ffff168960010161ffff1681615a7a57fe5b069250615a89818989896168f8565b8a8461ffff1662ffffff8110615a9b57fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310615bc75780518252601f199092019160209182019101615ba8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615c29576040519150601f19603f3d011682016040523d82523d6000602084013e615c2e565b606091505b5091509150818015615c5c575080511580615c5c5750808060200190516020811015615c5957600080fd5b50515b615c92576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000244c72ab61f11dd44bfa4aaf11e2efd89ca789fe1693919290918291908083835b60208310615d325780518252601f199092019160209182019101615d13565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114615d92576040519150601f19603f3d011682016040523d82523d6000602084013e615d97565b606091505b5091509150818015615dab57506020815110155b615db457600080fd5b808060200190516020811015615dc957600080fd5b50519250505090565b808201828110156152c457600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000ae81b9ffcde5ab7673dd4b2f5c648a5579430b1716939192909182919080838360208310615d325780518252601f199092019160209182019101615d13565b6000808361ffff1611615eb8576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611615ece575081615389565b825b8261ffff168161ffff161015615f15576001858261ffff1662ffffff8110615ef457fe5b01805463ffffffff191663ffffffff92909216919091179055600101615ed0565b50909392505050565b80600f81900b8114614bf557600080fd5b6000806000615f3c614bfa565b615f4e846020015185604001516164d6565b6040805160e0810182526001546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394615ff29491939092909190616b97565b93508460600151600f0b60001461616757846020015160020b816020015160020b1215616047576160406160298660200151614d75565b6160368760400151614d75565b8760600151616d4c565b9250616167565b846040015160020b816020015160020b121561613d5760055460408201516001600160801b03909116906160999061607d614c2f565b60208501516060860151608087015160099493929187916159ae565b6001805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b9390921692909202179055815160408701516160e991906160df90614d75565b8860600151616d4c565b93506161076160fb8760200151614d75565b83516060890151616d90565b92506161178187606001516155dd565b600580546001600160801b0319166001600160801b039290921691909117905550616167565b61616461614d8660200151614d75565b61615a8760400151614d75565b8760600151616d90565b91505b509193909250565b616177613dc3565b6161bf576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6161f2616dbf565b604080516001600160a01b039092168252519081900360200190a1565b600061621c8484846152e0565b90506000828061622857fe5b848609111561538957600019811061623f57600080fd5b6001019392505050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b616301613dc3565b15616346576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586161f2616dbf565b60608060008361ffff16116163bc576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff811180156163d457600080fd5b506040519080825280602002602001820160405280156163fe578160200160208202803683370190505b509150865167ffffffffffffffff8111801561641957600080fd5b50604051908082528060200260200182016040528015616443578160200160208202803683370190505b50905060005b87518110156164c9576164748a8a8a848151811061646357fe5b60200260200101518a8a8a8a615390565b84838151811061648057fe5b6020026020010184848151811061649357fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050616449565b5097509795505050505050565b8060020b8260020b12616516576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215616559576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b131561659b576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b60020b600881901d9161010090910790565b60008082116165bf57600080fd5b600160801b82106165d257608091821c91015b6801000000000000000082106165ea57604091821c91015b600160201b82106165fd57602091821c91015b62010000821061660f57601091821c91015b610100821061662057600891821c91015b6010821061663057600491821c91015b6004821061664057600291821c91015b60028210614bf557600101919050565b600080821161665e57600080fd5b5060ff6001600160801b0382161561667957607f1901616681565b608082901c91505b67ffffffffffffffff82161561669a57603f19016166a2565b604082901c91505b63ffffffff8216156166b757601f19016166bf565b602082901c91505b61ffff8216156166d257600f19016166da565b601082901c91505b60ff8216156166ec57600719016166f4565b600882901c91505b600f821615616706576003190161670e565b600482901c91505b60038216156167205760011901616728565b600282901c91505b6001821615614bf55760001901919050565b6000836001600160a01b0316856001600160a01b0316111561675a579293925b8161678757616782836001600160801b03168686036001600160a01b0316600160601b6152e0565b6167aa565b6167aa836001600160801b03168686036001600160a01b0316600160601b61620f565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156167d5579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166167ff57600080fd5b8361682f57866001600160a01b03166168228383896001600160a01b03166152e0565b8161682957fe5b04616855565b6168556168468383896001600160a01b031661620f565b886001600160a01b0316616dc3565b979650505050505050565b600080856001600160a01b03161161687757600080fd5b6000846001600160801b03161161688d57600080fd5b8161689f576167828585856001616dce565b6167aa8585856001616eaf565b600080856001600160a01b0316116168c357600080fd5b6000846001600160801b0316116168d957600080fd5b816168eb576167828585856000616eaf565b6167aa8585856000616dce565b6169006176d1565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611616954576001616956565b845b6001600160801b031663ffffffff60801b608085901b168161697457fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6169a36176d1565b6169ab6176d1565b888561ffff1662ffffff81106169bd57fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250616a2190899089616f92565b15616a59578663ffffffff16826000015163ffffffff161415616a4357615517565b81616a50838989886168f8565b91509150615517565b888361ffff168660010161ffff1681616a6e57fe5b0661ffff1662ffffff8110616a7f57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250616b3457604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b616b4388836000015189616f92565b616b7a576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b616b878989898887617053565b9150915097509795505050505050565b6000616ba66008878787616295565b60025460035491925090600080600f87900b15616cec576000616bc7614c2f565b6001546005549192506000918291616c119160099186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416615390565b9092509050616c4b60068d8b8d8b8b87898b60007f00000000000000000000000000000000000762d10ef955d55b7d038c7a7231cc6171f3565b9450616c8260068c8b8d8b8b87898b60017f00000000000000000000000000000000000762d10ef955d55b7d038c7a7231cc6171f3565b93508415616cb657616cb660078d7f00000000000000000000000000000000000000000000000000000000000000c86173ac565b8315616ce857616ce860078c7f00000000000000000000000000000000000000000000000000000000000000c86173ac565b5050505b600080616cfe60068c8c8b8a8a617412565b9092509050616d0f878a84846174be565b600089600f0b1215616d3d578315616d2c57616d2c60068c617653565b8215616d3d57616d3d60068b617653565b50505050505095945050505050565b60008082600f0b12616d7257616d6d616d6885858560016167b5565b615298565b6167ad565b616d85616d6885858560000360006167b5565b600003949350505050565b60008082600f0b12616dac57616d6d616d68858585600161673a565b616d85616d68858585600003600061673a565b3390565b808204910615150190565b60008115616e415760006001600160a01b03841115616e0457616dff84600160601b876001600160801b03166152e0565b616e1c565b6001600160801b038516606085901b81616e1a57fe5b045b9050616e39616e346001600160a01b03881683615dd2565b61767f565b9150506167ad565b60006001600160a01b03841115616e6f57616e6a84600160601b876001600160801b031661620f565b616e86565b616e86606085901b6001600160801b038716616dc3565b905080866001600160a01b031611616e9d57600080fd5b6001600160a01b0386160390506167ad565b600082616ebd5750836167ad565b600160601b600160e01b03606085901b168215616f4b576001600160a01b03861684810290858281616eeb57fe5b041415616f1c57818101828110616f1a57616f1083896001600160a01b03168361620f565b93505050506167ad565b505b616f4282616f3d878a6001600160a01b03168681616f3657fe5b0490615dd2565b616dc3565b925050506167ad565b6001600160a01b03861684810290858281616f6257fe5b04148015616f6f57508082115b616f7857600080fd5b808203616f10616e34846001600160a01b038b168461620f565b60008363ffffffff168363ffffffff1611158015616fbc57508363ffffffff168263ffffffff1611155b15616fd8578163ffffffff168363ffffffff1611159050615389565b60008463ffffffff168463ffffffff1611616fff578363ffffffff16600160201b01617007565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611617037578363ffffffff16600160201b0161703f565b8363ffffffff165b64ffffffffff169091111595945050505050565b61705b6176d1565b6170636176d1565b60008361ffff168560010161ffff168161707957fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff871682816170a657fe5b0662ffffff81106170b357fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061711d57806001019250617091565b898661ffff16826001018161712e57fe5b0662ffffff811061713b57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906171a5908b908b616f92565b90508080156171be57506171be8a8a8760000151616f92565b156171c957506171e6565b806171d9576001820392506171e0565b8160010193505b50617091565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b03168261721e828d6155dd565b9050846001600160801b0316816001600160801b0316111561726c576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015617311578c60020b8e60020b136172f957600183018b9055600283018a9055600383018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561735a5782546173559061735090600160801b9004600f90810b810b908f900b6152ca565b615f1e565b61737b565b825461737b9061735090600160801b9004600f90810b810b908f900b6152ae565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b816173bb57fe5b0760020b156173c957600080fd5b6000806173e48360020b8560020b816173de57fe5b0561659f565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126174585750506001820154600283015461746b565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561748d575050600183015460028401546174a0565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b61755d5781516001600160801b0316617555576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b50805161756c565b815161756990866155dd565b90505b60006175908360200151860384600001516001600160801b0316600160801b6152e0565b905060006175b68460400151860385600001516001600160801b0316600160801b6152e0565b905086600f0b6000146175dd5787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061760b57506000816001600160801b0316115b15617649576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114614bf557600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea2646970667358221220945781a25ad0e1ed456967590fe32b455cbe44358bf17f97870bd2666f73f12664736f6c63430007060033