60806040523480156200001157600080fd5b50604051620022f1380380620022f183398101604081905262000034916200052e565b8383600062000044838262000653565b50600162000053828262000653565b5050506200006833836200009260201b60201c565b600680546001600160a01b0319166001600160a01b0392909216919091179055506200071f915050565b6001600160a01b038216620000c257604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000620000d183838362000105565b90506001600160a01b0381161562000100576040516339e3563760e11b815260006004820152602401620000b9565b505050565b6000828152600260205260408120546001600160a01b039081169083161562000135576200013581848662000204565b6001600160a01b0381161562000175576200015460008581806200026e565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615620001a5576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b620002118383836200039c565b62000100576001600160a01b0383166200024257604051637e27328960e01b815260048101829052602401620000b9565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401620000b9565b80806200028357506001600160a01b03821615155b156200036c576000620002968462000425565b90506001600160a01b03831615801590620002c35750826001600160a01b0316816001600160a01b031614155b8015620002f657506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b15620003215760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401620000b9565b81156200036a5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038316158015906200041d5750826001600160a01b0316846001600160a01b03161480620003f857506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b806200041d57506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6000818152600260205260408120546001600160a01b0316806200046057604051637e27328960e01b815260048101849052602401620000b9565b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200048e57600080fd5b81516001600160401b0380821115620004ab57620004ab62000466565b604051601f8301601f19908116603f01168101908282118183101715620004d657620004d662000466565b8160405283815260209250866020858801011115620004f457600080fd5b600091505b83821015620005185785820183015181830184015290820190620004f9565b6000602085830101528094505050505092915050565b600080600080608085870312156200054557600080fd5b84516001600160401b03808211156200055d57600080fd5b6200056b888389016200047c565b955060208701519150808211156200058257600080fd5b5062000591878288016200047c565b60408701516060880151919550935090506001600160a01b0381168114620005b857600080fd5b939692955090935050565b600181811c90821680620005d857607f821691505b602082108103620005f957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000100576000816000526020600020601f850160051c810160208610156200062a5750805b601f850160051c820191505b818110156200064b5782815560010162000636565b505050505050565b81516001600160401b038111156200066f576200066f62000466565b6200068781620006808454620005c3565b84620005ff565b602080601f831160018114620006bf5760008415620006a65750858301515b600019600386901b1c1916600185901b1785556200064b565b600085815260208120601f198616915b82811015620006f057888601518255948401946001909101908401620006cf565b50858210156200070f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bc2806200072f6000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063b88d4fde11610059578063b88d4fde1461028e578063c87b56dd146102ae578063c9bc5539146102ce578063e985e9c5146102e157600080fd5b80636352211e1461020b57806370a082311461022b57806395d89b4114610259578063a22cb4651461026e57600080fd5b8063095ea7b3116100c6578063095ea7b31461018957806323b872dd146101ab57806342842e0e146101cb57806356d5d475146101eb57600080fd5b806301ffc9a7146100ed57806306fdde0314610122578063081812fc14610144575b600080fd5b3480156100f957600080fd5b5061010d61010836600461165c565b610337565b60405190151581526020015b60405180910390f35b34801561012e57600080fd5b5061013761041c565b60405161011991906116e7565b34801561015057600080fd5b5061016461015f3660046116fa565b6104ae565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610119565b34801561019557600080fd5b506101a96101a4366004611735565b6104e4565b005b3480156101b757600080fd5b506101a96101c6366004611761565b6104f3565b3480156101d757600080fd5b506101a96101e6366004611761565b6105e9565b3480156101f757600080fd5b506101a96102063660046117bb565b610609565b34801561021757600080fd5b506101646102263660046116fa565b610685565b34801561023757600080fd5b5061024b610246366004611842565b610690565b604051908152602001610119565b34801561026557600080fd5b5061013761070b565b34801561027a57600080fd5b506101a961028936600461185f565b61071a565b34801561029a57600080fd5b506101a96102a93660046118cc565b610725565b3480156102ba57600080fd5b506101376102c93660046116fa565b61073c565b6101a96102dc3660046119ca565b6107b1565b3480156102ed57600080fd5b5061010d6102fc3660046119e8565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806103ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061041657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461042b90611a16565b80601f016020809104026020016040519081016040528092919081815260200182805461045790611a16565b80156104a45780601f10610479576101008083540402835291602001916104a4565b820191906000526020600020905b81548152906001019060200180831161048757829003601f168201915b5050505050905090565b60006104b982610a2e565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16610416565b6104ef828233610a8d565b5050565b73ffffffffffffffffffffffffffffffffffffffff8216610548576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000610555838333610a9a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105e3576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161053f565b50505050565b61060483838360405180602001604052806000815250610725565b505050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461062d57600080fd5b60008061066f84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c1792505050565b9150915061067d8183610c3d565b505050505050565b600061041682610a2e565b600073ffffffffffffffffffffffffffffffffffffffff82166106e2576040517f89c62b640000000000000000000000000000000000000000000000000000000081526000600482015260240161053f565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461042b90611a16565b6104ef338383610cee565b6107308484846104f3565b6105e384848484610deb565b606061074782610a2e565b50600061075f60408051602081019091526000815290565b9050600081511161077f57604051806020016040528060008152506107aa565b8061078984610fe2565b60405160200161079a929190611a69565b6040516020818303038152906040525b9392505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74206f776e65720000000000000000000000000000000000000000000000604482015260640161053f565b73ffffffffffffffffffffffffffffffffffffffff8216600061086183336110a0565b6006546040517f9c42bd1800000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690639c42bd18906108c190899087908790600401611a98565b602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190611ac6565b90506109436040518060400160405280600881526020017f6665652069733a20000000000000000000000000000000000000000000000000815250826110eb565b8034101561095057600080fd5b6109598461117c565b6006546040517ffa31de0100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063fa31de019083906109b5908a9088908890600401611a98565b60206040518083038185885af11580156109d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109f89190611ac6565b5060405133904780156108fc02916000818181858888f19350505050158015610a25573d6000803e3d6000fd5b50505050505050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610416576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161053f565b61060483838360016111dd565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff90811690831615610ad457610ad48184866113a8565b73ffffffffffffffffffffffffffffffffffffffff811615610b4a57610afe6000856000806111dd565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff851615610b935773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60008060008084806020019051810190610c319190611adf565b90969095509350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610c8d576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526000600482015260240161053f565b6000610c9b83836000610a9a565b905073ffffffffffffffffffffffffffffffffffffffff811615610604576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526000600482015260240161053f565b73ffffffffffffffffffffffffffffffffffffffff8216610d53576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161053f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b156105e3576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290610e60903390889087908790600401611b04565b6020604051808303816000875af1925050508015610eb9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610eb691810190611b4d565b60015b610f48573d808015610ee7576040519150601f19603f3d011682016040523d82523d6000602084013e610eec565b606091505b508051600003610f40576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161053f565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610fdb576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161053f565b5050505050565b60606000610fef83611458565b600101905060008167ffffffffffffffff81111561100f5761100f61189d565b6040519080825280601f01601f191660200182016040528015611039576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461104357509392505050565b606082826040516020016110d492919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052905092915050565b6104ef8282604051602401611101929190611b6a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc0000000000000000000000000000000000000000000000000000000017905261153a565b600061118b6000836000610a9a565b905073ffffffffffffffffffffffffffffffffffffffff81166104ef576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810183905260240161053f565b80806111fe575073ffffffffffffffffffffffffffffffffffffffff821615155b1561135357600061120e84610a2e565b905073ffffffffffffffffffffffffffffffffffffffff83161580159061126157508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156112a0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b156112ef576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161053f565b811561135157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6113b3838383611546565b6106045773ffffffffffffffffffffffffffffffffffffffff8316611407576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161053f565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810182905260440161053f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106114a1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106114cd576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106114eb57662386f26fc10000830492506010015b6305f5e1008310611503576305f5e100830492506008015b612710831061151757612710830492506004015b60648310611529576064830492506002015b600a83106104165760010192915050565b6115438161160d565b50565b600073ffffffffffffffffffffffffffffffffffffffff83161580159061160557508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115d4575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b80611605575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461154357600080fd5b60006020828403121561166e57600080fd5b81356107aa8161162e565b60005b8381101561169457818101518382015260200161167c565b50506000910152565b600081518084526116b5816020860160208601611679565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107aa602083018461169d565b60006020828403121561170c57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461154357600080fd5b6000806040838503121561174857600080fd5b823561175381611713565b946020939093013593505050565b60008060006060848603121561177657600080fd5b833561178181611713565b9250602084013561179181611713565b929592945050506040919091013590565b803563ffffffff811681146117b657600080fd5b919050565b600080600080606085870312156117d157600080fd5b6117da856117a2565b935060208501359250604085013567ffffffffffffffff808211156117fe57600080fd5b818701915087601f83011261181257600080fd5b81358181111561182157600080fd5b88602082850101111561183357600080fd5b95989497505060200194505050565b60006020828403121561185457600080fd5b81356107aa81611713565b6000806040838503121561187257600080fd5b823561187d81611713565b91506020830135801515811461189257600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156118e257600080fd5b84356118ed81611713565b935060208501356118fd81611713565b925060408501359150606085013567ffffffffffffffff8082111561192157600080fd5b818701915087601f83011261193557600080fd5b8135818111156119475761194761189d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561198d5761198d61189d565b816040528281528a60208487010111156119a657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806000606084860312156119df57600080fd5b611781846117a2565b600080604083850312156119fb57600080fd5b8235611a0681611713565b9150602083013561189281611713565b600181811c90821680611a2a57607f821691505b602082108103611a63577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008351611a7b818460208801611679565b835190830190611a8f818360208801611679565b01949350505050565b63ffffffff84168152826020820152606060408201526000611abd606083018461169d565b95945050505050565b600060208284031215611ad857600080fd5b5051919050565b60008060408385031215611af257600080fd5b82519150602083015161189281611713565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611b43608083018461169d565b9695505050505050565b600060208284031215611b5f57600080fd5b81516107aa8161162e565b604081526000611b7d604083018561169d565b9050826020830152939250505056fea2646970667358221220af1c06e0b46ebca0544da0c3c8e4311c13ad89586dc9b261c0e86919b898af5264736f6c63430008180033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec28847660000000000000000000000000000000000000000000000000000000000000006746f6b656e5f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025354000000000000000000000000000000000000000000000000000000000000