0x608060405234801561001057600080fd5b50600436106101215760003560e01c80637a9e5e4b116100ad578063c53a398511610071578063c53a3985146102ee578063e688747b1461031e578063ea7ca2761461034e578063ed0d0efb1461037e578063f2fde38b146103ae57610121565b80637a9e5e4b1461024a5780638da5cb5b14610266578063b700961314610284578063bb6b91f0146102b4578063bf7e214f146102d057610121565b80631cff79cd116100f45780631cff79cd146101be57806343bdeb4d146101da5780634b5159da146101f657806367aff48414610212578063728b952b1461022e57610121565b806306a36aee146101265780630bade8a4146101565780630ea9b75b1461018657806318dfb3c7146101a2575b600080fd5b610140600480360381019061013b919061166c565b6103ca565b60405161014d91906116b2565b60405180910390f35b610170600480360381019061016b9190611725565b6103e2565b60405161017d919061176d565b60405180910390f35b6101a0600480360381019061019b91906117ed565b610402565b005b6101bc60048036038101906101b791906118fb565b6105ae565b005b6101d860048036038101906101d391906119d2565b6106d7565b005b6101f460048036038101906101ef9190611a88565b610754565b005b610210600480360381019061020b9190611afc565b61081f565b005b61022c60048036038101906102279190611b3c565b610950565b005b61024860048036038101906102439190611bcd565b610acf565b005b610264600480360381019061025f9190611c0d565b610c18565b005b61026e610dd9565b60405161027b9190611c49565b60405180910390f35b61029e60048036038101906102999190611c64565b610dfd565b6040516102ab919061176d565b60405180910390f35b6102ce60048036038101906102c991906117ed565b611026565b005b6102d86110a3565b6040516102e59190611d16565b60405180910390f35b6103086004803603810190610303919061166c565b6110c9565b6040516103159190611d16565b60405180910390f35b61033860048036038101906103339190611d31565b6110fc565b604051610345919061176d565b60405180910390f35b61036860048036038101906103639190611d71565b611167565b604051610375919061176d565b60405180910390f35b61039860048036038101906103939190611725565b6111c0565b6040516103a591906116b2565b60405180910390f35b6103c860048036038101906103c3919061166c565b6111d8565b005b60036020528060005260406000206000915090505481565b60046020528060005260406000206000915054906101000a900460ff1681565b610430336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b61046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046690611e0e565b60405180910390fd5b80156104e3578260ff166001901b60001b60056000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206000828254179250508190555061054e565b8260ff166001901b60001b1960056000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600082825416925050819055505b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168360ff167fbfe16b2c35ce23dfd1ab0e7b5d086a10060c9b52d1574e1680c881b3b3a2b151836040516105a1919061176d565b60405180910390a3505050565b6105dc336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b61061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290611e0e565b60405180910390fd5b81819050848490501461065a576040517f5547877e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b848490508110156106d0576106bd85858381811061067e5761067d611e2e565b5b9050602002016020810190610693919061166c565b8484848181106106a6576106a5611e2e565b5b90506020028101906106b89190611e6c565b611420565b80806106c890611f08565b91505061065d565b5050505050565b610705336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b90611e0e565b60405180910390fd5b61074f838383611420565b505050565b610782336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890611e0e565b60405180910390fd5b600083839050905060005b818110156108175760008585838181106107e9576107e8611e2e565b5b90506020020160208101906107fe9190611725565b905061080b878286610402565b816001019150506107cc565b505050505050565b61084d336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b61088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390611e0e565b60405180910390fd5b8060046000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f36d28126bef21a4f3765d7fcb7c45cead463ae4c41094ef3b771ede59854410382604051610944919061176d565b60405180910390a25050565b61097e336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b6109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b490611e0e565b60405180910390fd5b8015610a1f578160ff166001901b60001b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550610a78565b8160ff166001901b60001b19600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055505b8160ff168373ffffffffffffffffffffffffffffffffffffffff167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610ac2919061176d565b60405180910390a3505050565b610afd336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390611e0e565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa4908e11a5f895b13d51526c331ac93cdd30e59772361c5d07874eb36bff206560405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d325750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff1660e01b8152600401610cf093929190611f5f565b602060405180830381865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190611fab565b5b610d3b57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019860405160405180910390a350565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f1c578073ffffffffffffffffffffffffffffffffffffffff1663b70096138686866040518463ffffffff1660e01b8152600401610ed393929190611f5f565b602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190611fab565b91505061101f565b60046000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff168061101b575060056000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002054600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054166000801b14155b9150505b9392505050565b611054336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90611e0e565b60405180910390fd5b61109e838383610402565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060018460ff1660056000867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000205460001c901c161415905092915050565b60008060018360ff16600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460001c901c161415905092915050565b60056020528060005260406000206000915090505481565b611206336000357fffffffff00000000000000000000000000000000000000000000000000000000166112e2565b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90611e0e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156113c157508073ffffffffffffffffffffffffffffffffffffffff1663b70096138530866040518463ffffffff1660e01b815260040161137f93929190611f5f565b602060405180830381865afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c09190611fab565b5b80611417575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600080600090505b60048110156114bb5760088161143e9190611fd8565b60ff60f81b85858481811061145657611455611e2e565b5b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c8217915080806114b390611f08565b915050611428565b506114c7338583610dfd565b158015611520575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611557576040517f2289999d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff168484604051611580929190612059565b6000604051808303816000865af19150503d80600081146115bd576040519150601f19603f3d011682016040523d82523d6000602084013e6115c2565b606091505b50509050806115fd576040517f84aed38d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116398261160e565b9050919050565b6116498161162e565b811461165457600080fd5b50565b60008135905061166681611640565b92915050565b60006020828403121561168257611681611604565b5b600061169084828501611657565b91505092915050565b6000819050919050565b6116ac81611699565b82525050565b60006020820190506116c760008301846116a3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611702816116cd565b811461170d57600080fd5b50565b60008135905061171f816116f9565b92915050565b60006020828403121561173b5761173a611604565b5b600061174984828501611710565b91505092915050565b60008115159050919050565b61176781611752565b82525050565b6000602082019050611782600083018461175e565b92915050565b600060ff82169050919050565b61179e81611788565b81146117a957600080fd5b50565b6000813590506117bb81611795565b92915050565b6117ca81611752565b81146117d557600080fd5b50565b6000813590506117e7816117c1565b92915050565b60008060006060848603121561180657611805611604565b5b6000611814868287016117ac565b935050602061182586828701611710565b9250506040611836868287016117d8565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261186557611864611840565b5b8235905067ffffffffffffffff81111561188257611881611845565b5b60208301915083602082028301111561189e5761189d61184a565b5b9250929050565b60008083601f8401126118bb576118ba611840565b5b8235905067ffffffffffffffff8111156118d8576118d7611845565b5b6020830191508360208202830111156118f4576118f361184a565b5b9250929050565b6000806000806040858703121561191557611914611604565b5b600085013567ffffffffffffffff81111561193357611932611609565b5b61193f8782880161184f565b9450945050602085013567ffffffffffffffff81111561196257611961611609565b5b61196e878288016118a5565b925092505092959194509250565b60008083601f84011261199257611991611840565b5b8235905067ffffffffffffffff8111156119af576119ae611845565b5b6020830191508360018202830111156119cb576119ca61184a565b5b9250929050565b6000806000604084860312156119eb576119ea611604565b5b60006119f986828701611657565b935050602084013567ffffffffffffffff811115611a1a57611a19611609565b5b611a268682870161197c565b92509250509250925092565b60008083601f840112611a4857611a47611840565b5b8235905067ffffffffffffffff811115611a6557611a64611845565b5b602083019150836020820283011115611a8157611a8061184a565b5b9250929050565b60008060008060608587031215611aa257611aa1611604565b5b6000611ab0878288016117ac565b945050602085013567ffffffffffffffff811115611ad157611ad0611609565b5b611add87828801611a32565b93509350506040611af0878288016117d8565b91505092959194509250565b60008060408385031215611b1357611b12611604565b5b6000611b2185828601611710565b9250506020611b32858286016117d8565b9150509250929050565b600080600060608486031215611b5557611b54611604565b5b6000611b6386828701611657565b9350506020611b74868287016117ac565b9250506040611b85868287016117d8565b9150509250925092565b6000611b9a8261162e565b9050919050565b611baa81611b8f565b8114611bb557600080fd5b50565b600081359050611bc781611ba1565b92915050565b60008060408385031215611be457611be3611604565b5b6000611bf285828601611657565b9250506020611c0385828601611bb8565b9150509250929050565b600060208284031215611c2357611c22611604565b5b6000611c3184828501611bb8565b91505092915050565b611c438161162e565b82525050565b6000602082019050611c5e6000830184611c3a565b92915050565b600080600060608486031215611c7d57611c7c611604565b5b6000611c8b86828701611657565b9350506020611c9c86828701611657565b9250506040611cad86828701611710565b9150509250925092565b6000819050919050565b6000611cdc611cd7611cd28461160e565b611cb7565b61160e565b9050919050565b6000611cee82611cc1565b9050919050565b6000611d0082611ce3565b9050919050565b611d1081611cf5565b82525050565b6000602082019050611d2b6000830184611d07565b92915050565b60008060408385031215611d4857611d47611604565b5b6000611d56858286016117ac565b9250506020611d6785828601611710565b9150509250929050565b60008060408385031215611d8857611d87611604565b5b6000611d9685828601611657565b9250506020611da7858286016117ac565b9150509250929050565b600082825260208201905092915050565b7f554e415554484f52495a45440000000000000000000000000000000000000000600082015250565b6000611df8600c83611db1565b9150611e0382611dc2565b602082019050919050565b60006020820190508181036000830152611e2781611deb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611e8957611e88611e5d565b5b80840192508235915067ffffffffffffffff821115611eab57611eaa611e62565b5b602083019250600182023603831315611ec757611ec6611e67565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000611f1382611efe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4557611f44611ecf565b5b600182019050919050565b611f59816116cd565b82525050565b6000606082019050611f746000830186611c3a565b611f816020830185611c3a565b611f8e6040830184611f50565b949350505050565b600081519050611fa5816117c1565b92915050565b600060208284031215611fc157611fc0611604565b5b6000611fcf84828501611f96565b91505092915050565b6000611fe382611efe565b9150611fee83611efe565b9250828202611ffc81611efe565b9150828204841483151761201357612012611ecf565b5b5092915050565b600081905092915050565b82818337600083830152505050565b6000612040838561201a565b935061204d838584612025565b82840190509392505050565b6000612066828486612034565b9150819050939250505056fea2646970667358221220136f257c6de582d0482689e5f8870c5f8852be76fe17aa1e6eeedf7484f95fea64736f6c63430008110033