0x608060405234801561001057600080fd5b506114c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80633cbb1bb2116100715780633cbb1bb21461015257806391d1485414610165578063999873f714610178578063a642c0321461018b578063d49232a1146101ab578063d547741f146101be57600080fd5b80631a9968a9146100b957806324d7806c146100ce57806325acc72e146100f65780632f2ff15d1461011757806335742d741461012a57806336568abe1461013f575b600080fd5b6100cc6100c7366004610dee565b6101d1565b005b6100e16100dc366004610e2a565b610285565b60405190151581526020015b60405180910390f35b610109610104366004610e4c565b6102a5565b6040519081526020016100ed565b6100cc610125366004610e6e565b6102e3565b61010960008051602061146e83398151915281565b6100cc61014d366004610e6e565b610308565b610109610160366004610f17565b61033a565b6100e1610173366004610e6e565b610842565b6100cc610186366004610fe0565b610878565b61019e61019936600461102b565b6109a4565b6040516100ed9190611044565b6100cc6101b9366004611134565b610b15565b6100cc6101cc366004610e6e565b610c54565b6101e860008051602061146e833981519152610c67565b60006101f2610c90565b80549091506001600160401b031684111561022057604051631a3973a960e01b815260040160405180910390fd5b6000848152601090910160208181526040808420815180830190925280546001600160a01b03978816835262ffffff9687168385019081529890955292909152519451909216600160a01b026001600160b81b03199091169390921692909217179055565b600061029f60008051602061146e83398151915283610842565b92915050565b6000806102b0610c90565b80549091506000906102ce90600160401b900462ffffff16866111c9565b90506102da84826111e8565b95945050505050565b6102fa60008051602061146e833981519152610c67565b6103048282610cb4565b5050565b6001600160a01b038116331461033057604051623fff3d60e91b815260040160405180910390fd5b6103048282610d29565b600061035360008051602061146e833981519152610c67565b600061035d610c90565b805490915061037a90600190600160401b900462ffffff16611200565b62ffffff168a62ffffff16106103a357604051631f6e464360e31b815260040160405180910390fd5b6040518061018001604052808b62ffffff168152602001600062ffffff168152602001600062ffffff1681526020018a62ffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018760ff16815260200186151581526020018560ff1662ffffff1681526020018460ff1662ffffff168152602001600015158152602001600015158152508160030160008360000160009054906101000a90046001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548162ffffff021916908362ffffff16021790555060408201518160000160066101000a81548162ffffff021916908362ffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160146101000a81548160ff021916908360ff16021790555060e08201518160000160156101000a81548160ff0219169083151502179055506101008201518160000160166101000a81548162ffffff021916908362ffffff1602179055506101208201518160000160196101000a81548162ffffff021916908362ffffff16021790555061014082015181600001601c6101000a81548160ff02191690831515021790555061016082015181600001601d6101000a81548160ff0219169083151502179055509050508b8b82600b0160008460000160009054906101000a90046001600160401b03166001600160401b03168152602001908152602001600020918261065f9291906112c2565b50604051806040016040528060006001600160a01b03168152602001600062ffffff168152508160100160008360000160009054906101000a90046001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050306001600160a01b03167fb8a50f8b56d383acde4cfeb2a03e52290b58baa3907843936e2b76dc698b6a898260000160009054906101000a90046001600160401b03168c8f8f8e8b604051610769969594939291906113ab565b60405180910390a280547f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c906107a9906001600160401b031660016102a5565b82546107c3906001600160401b031662ffffff8e166102a5565b6040805192835260208301919091520160405180910390a1805460019082906000906107f99084906001600160401b03166113f3565b82546101009290920a6001600160401b03818102199093169183160217909155825461082992506001911661141e565b6001600160401b03169c9b505050505050505050505050565b60008061084d610d9b565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b61088f60008051602061146e833981519152610c67565b6000610899610c90565b80549091506001600160401b03168411156108c757604051631a3973a960e01b815260040160405180910390fd5b60008481526003820160209081526040808320600b85019092529091206108ef8486836112c2565b50805460405130917f7b84ed982eb984e075475d64339fe3d504cdbcd804462aea361da49e071345729161093091899162ffffff909116908990899061143e565b60405180910390a27f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c6109648660016102a5565b600087815260038501602052604090205461098590889062ffffff166102a5565b6040805192835260208301919091520160405180910390a15050505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905290610a0d610c90565b80549091506001600160401b0316831115610a3b57604051631a3973a960e01b815260040160405180910390fd5b60009283526003016020908152604092839020835161018081018552905462ffffff808216835263010000008204811693830193909352600160301b8104831694820194909452600160481b84048216606082015263ffffffff600160601b850481166080830152600160801b85041660a082015260ff600160a01b8504811660c0830152600160a81b85048116151560e0830152600160b01b85048316610100830152600160c81b8504909216610120820152600160e01b840482161515610140820152600160e81b9093041615156101608301525090565b610b2c60008051602061146e833981519152610c67565b6000610b36610c90565b80549091506001600160401b0316881115610b6457604051631a3973a960e01b815260040160405180910390fd5b600088815260038201602052604090208054610b959062ffffff600160301b82048116916301000000900416611200565b62ffffff168462ffffff161015610bbf57604051631f6e464360e31b815260040160405180910390fd5b8054921515600160a81b0262ffffff60ff60a81b011960ff909616600160a01b0260ff60a01b1963ffffffff988916600160801b021664ffffffffff60801b1998909916600160601b0263ffffffff60601b1962ffffff9b8c16600160481b021666ffffffffffffff60481b199096169590951794909417969096169690961791909117929092169416939093171790555050565b61033060008051602061146e8339815191525b610c718133610842565b610c8d57604051623fff3d60e91b815260040160405180910390fd5b50565b7fbc7d0e8ed4dcaf65aa37ff076afe36b4e8fbc0e9b704cfd2ecde67415414d07a90565b6000610cbe610d9b565b9050610cca8383610842565b610d24576000838152602082815260408083206001600160a01b0386168085529252808320805460ff1916600117905551339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b505050565b6000610d33610d9b565b9050610d3f8383610842565b15610d24576000838152602082815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4505050565b7f8113889f0b868eeca4f3f98876bebc5d45f78186a7ac12c94ed39d8b17ef258e90565b80356001600160a01b0381168114610dd657600080fd5b919050565b803562ffffff81168114610dd657600080fd5b600080600060608486031215610e0357600080fd5b83359250610e1360208501610dbf565b9150610e2160408501610ddb565b90509250925092565b600060208284031215610e3c57600080fd5b610e4582610dbf565b9392505050565b60008060408385031215610e5f57600080fd5b50508035926020909101359150565b60008060408385031215610e8157600080fd5b82359150610e9160208401610dbf565b90509250929050565b60008083601f840112610eac57600080fd5b5081356001600160401b03811115610ec357600080fd5b602083019150836020828501011115610edb57600080fd5b9250929050565b803563ffffffff81168114610dd657600080fd5b803560ff81168114610dd657600080fd5b80358015158114610dd657600080fd5b6000806000806000806000806000806101208b8d031215610f3757600080fd5b8a356001600160401b03811115610f4d57600080fd5b610f598d828e01610e9a565b909b509950610f6c905060208c01610ddb565b9750610f7a60408c01610ddb565b9650610f8860608c01610ee2565b9550610f9660808c01610ee2565b9450610fa460a08c01610ef6565b9350610fb260c08c01610f07565b9250610fc060e08c01610ef6565b9150610fcf6101008c01610ef6565b90509295989b9194979a5092959850565b600080600060408486031215610ff557600080fd5b8335925060208401356001600160401b0381111561101257600080fd5b61101e86828701610e9a565b9497909650939450505050565b60006020828403121561103d57600080fd5b5035919050565b815162ffffff16815261018081016020830151611068602084018262ffffff169052565b50604083015161107f604084018262ffffff169052565b506060830151611096606084018262ffffff169052565b5060808301516110ae608084018263ffffffff169052565b5060a08301516110c660a084018263ffffffff169052565b5060c08301516110db60c084018260ff169052565b5060e08301516110ef60e084018215159052565b506101008381015162ffffff90811691840191909152610120808501519091169083015261014080840151151590830152610160928301511515929091019190915290565b600080600080600080600060e0888a03121561114f57600080fd5b8735965061115f60208901610ddb565b955061116d60408901610ee2565b945061117b60608901610ee2565b935061118960808901610ef6565b925061119760a08901610ddb565b91506111a560c08901610f07565b905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156111e3576111e36111b3565b500290565b600082198211156111fb576111fb6111b3565b500190565b600062ffffff8381169083168181101561121c5761121c6111b3565b039392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061124e57607f821691505b60208210810361126e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610d2457600081815260208120601f850160051c8101602086101561129b5750805b601f850160051c820191505b818110156112ba578281556001016112a7565b505050505050565b6001600160401b038311156112d9576112d9611224565b6112ed836112e7835461123a565b83611274565b6000601f84116001811461132157600085156113095750838201355b600019600387901b1c1916600186901b17835561137b565b600083815260209020601f19861690835b828110156113525786850135825560209485019460019092019101611332565b508682101561136f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160401b0387168152600062ffffff808816602084015260a060408401526113da60a084018789611382565b9416606083015250901515608090910152949350505050565b60006001600160401b03808316818516808303821115611415576114156111b3565b01949350505050565b60006001600160401b038381169083168181101561121c5761121c6111b3565b84815262ffffff84166020820152606060408201526000611463606083018486611382565b969550505050505056feea8e1b953cb200117b202dd78c6958f9c14d952d5bdaa146141d2a5f9ee220dba2646970667358221220f52cb57bdfa76d429df8d23d087b0560526bf568848687255132bc928fad25cd64736f6c634300080f0033