0x60806040523480156200001157600080fd5b506040518060400160405280600781526020017f52657370656374000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f525350000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000264565b508060049080519060200190620000af92919062000264565b505050620000c76000801b33620000ff60201b60201c565b620000f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000ff60201b60201c565b62000379565b620001118282620001f160201b60201c565b620001ed5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001926200025c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620002729062000343565b90600052602060002090601f016020900481019282620002965760008555620002e2565b82601f10620002b157805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e1578251825591602001919060010190620002c4565b5b509050620002f19190620002f5565b5090565b5b8082111562000310576000816000905550600101620002f6565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035c57607f821691505b6020821081141562000373576200037262000314565b5b50919050565b61217a80620003896000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806340c10f19116100ad578063a457c2d711610071578063a457c2d71461036b578063a9059cbb1461039b578063d5391393146103cb578063d547741f146103e9578063dd62ed3e146104055761012c565b806340c10f19146102b357806370a08231146102cf57806391d14854146102ff57806395d89b411461032f578063a217fddf1461034d5761012c565b8063248a9ca3116100f4578063248a9ca3146101fd5780632f2ff15d1461022d578063313ce5671461024957806336568abe1461026757806339509351146102835761012c565b806301ffc9a71461013157806306fdde0314610161578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b61014b6004803603810190610146919061154c565b610435565b6040516101589190611594565b60405180910390f35b6101696104af565b6040516101769190611648565b60405180910390f35b610199600480360381019061019491906116fe565b610541565b6040516101a69190611594565b60405180910390f35b6101b7610564565b6040516101c4919061174d565b60405180910390f35b6101e760048036038101906101e29190611768565b61056e565b6040516101f49190611594565b60405180910390f35b610217600480360381019061021291906117f1565b61059d565b604051610224919061182d565b60405180910390f35b61024760048036038101906102429190611848565b6105bd565b005b6102516105de565b60405161025e91906118a4565b60405180910390f35b610281600480360381019061027c9190611848565b6105e3565b005b61029d600480360381019061029891906116fe565b610666565b6040516102aa9190611594565b60405180910390f35b6102cd60048036038101906102c891906116fe565b61069d565b005b6102e960048036038101906102e491906118bf565b6106d6565b6040516102f6919061174d565b60405180910390f35b61031960048036038101906103149190611848565b61071e565b6040516103269190611594565b60405180910390f35b610337610789565b6040516103449190611648565b60405180910390f35b61035561081b565b604051610362919061182d565b60405180910390f35b610385600480360381019061038091906116fe565b610822565b6040516103929190611594565b60405180910390f35b6103b560048036038101906103b091906116fe565b610899565b6040516103c29190611594565b60405180910390f35b6103d36108bc565b6040516103e0919061182d565b60405180910390f35b61040360048036038101906103fe9190611848565b6108e0565b005b61041f600480360381019061041a91906118ec565b610901565b60405161042c919061174d565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782610988565b5b9050919050565b6060600380546104be9061195b565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea9061195b565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b60008061054c6109f2565b90506105598185856109fa565b600191505092915050565b6000600254905090565b6000806105796109f2565b9050610586858285610bc5565b610591858585610c51565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6105c68261059d565b6105cf81610ec9565b6105d98383610edd565b505050565b600090565b6105eb6109f2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f906119ff565b60405180910390fd5b6106628282610fbe565b5050565b6000806106716109f2565b90506106928185856106838589610901565b61068d9190611a4e565b6109fa565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106c781610ec9565b6106d183836110a0565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546107989061195b565b80601f01602080910402602001604051908101604052809291908181526020018280546107c49061195b565b80156108115780601f106107e657610100808354040283529160200191610811565b820191906000526020600020905b8154815290600101906020018083116107f457829003601f168201915b5050505050905090565b6000801b81565b60008061082d6109f2565b9050600061083b8286610901565b905083811015610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087790611b16565b60405180910390fd5b61088d82868684036109fa565b60019250505092915050565b6000806108a46109f2565b90506108b1818585610c51565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6108e98261059d565b6108f281610ec9565b6108fc8383610fbe565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6190611ba8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190611c3a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bb8919061174d565b60405180910390a3505050565b6000610bd18484610901565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c4b5781811015610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490611ca6565b60405180910390fd5b610c4a84848484036109fa565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890611d38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890611dca565b60405180910390fd5b610d3c8383836111f7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990611e5c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb0919061174d565b60405180910390a3610ec38484846111fc565b50505050565b610eda81610ed56109f2565b611201565b50565b610ee7828261071e565b610fba5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f5f6109f2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610fc8828261071e565b1561109c5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506110416109f2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611ec8565b60405180910390fd5b61111c600083836111f7565b806002600082825461112e9190611a4e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111df919061174d565b60405180910390a36111f3600083836111fc565b5050565b505050565b505050565b61120b828261071e565b6112825761121881611286565b6112268360001c60206112b3565b604051602001611237929190611fbc565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112799190611648565b60405180910390fd5b5050565b60606112ac8273ffffffffffffffffffffffffffffffffffffffff16601460ff166112b3565b9050919050565b6060600060028360026112c69190611ff6565b6112d09190611a4e565b67ffffffffffffffff8111156112e9576112e8612050565b5b6040519080825280601f01601f19166020018201604052801561131b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106113535761135261207f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106113b7576113b661207f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026113f79190611ff6565b6114019190611a4e565b90505b60018111156114a1577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106114435761144261207f565b5b1a60f81b82828151811061145a5761145961207f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061149a906120ae565b9050611404565b50600084146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90612124565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611529816114f4565b811461153457600080fd5b50565b60008135905061154681611520565b92915050565b600060208284031215611562576115616114ef565b5b600061157084828501611537565b91505092915050565b60008115159050919050565b61158e81611579565b82525050565b60006020820190506115a96000830184611585565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115e95780820151818401526020810190506115ce565b838111156115f8576000848401525b50505050565b6000601f19601f8301169050919050565b600061161a826115af565b61162481856115ba565b93506116348185602086016115cb565b61163d816115fe565b840191505092915050565b60006020820190508181036000830152611662818461160f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116958261166a565b9050919050565b6116a58161168a565b81146116b057600080fd5b50565b6000813590506116c28161169c565b92915050565b6000819050919050565b6116db816116c8565b81146116e657600080fd5b50565b6000813590506116f8816116d2565b92915050565b60008060408385031215611715576117146114ef565b5b6000611723858286016116b3565b9250506020611734858286016116e9565b9150509250929050565b611747816116c8565b82525050565b6000602082019050611762600083018461173e565b92915050565b600080600060608486031215611781576117806114ef565b5b600061178f868287016116b3565b93505060206117a0868287016116b3565b92505060406117b1868287016116e9565b9150509250925092565b6000819050919050565b6117ce816117bb565b81146117d957600080fd5b50565b6000813590506117eb816117c5565b92915050565b600060208284031215611807576118066114ef565b5b6000611815848285016117dc565b91505092915050565b611827816117bb565b82525050565b6000602082019050611842600083018461181e565b92915050565b6000806040838503121561185f5761185e6114ef565b5b600061186d858286016117dc565b925050602061187e858286016116b3565b9150509250929050565b600060ff82169050919050565b61189e81611888565b82525050565b60006020820190506118b96000830184611895565b92915050565b6000602082840312156118d5576118d46114ef565b5b60006118e3848285016116b3565b91505092915050565b60008060408385031215611903576119026114ef565b5b6000611911858286016116b3565b9250506020611922858286016116b3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061197357607f821691505b602082108114156119875761198661192c565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006119e9602f836115ba565b91506119f48261198d565b604082019050919050565b60006020820190508181036000830152611a18816119dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a59826116c8565b9150611a64836116c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a9957611a98611a1f565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611b006025836115ba565b9150611b0b82611aa4565b604082019050919050565b60006020820190508181036000830152611b2f81611af3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b926024836115ba565b9150611b9d82611b36565b604082019050919050565b60006020820190508181036000830152611bc181611b85565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c246022836115ba565b9150611c2f82611bc8565b604082019050919050565b60006020820190508181036000830152611c5381611c17565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611c90601d836115ba565b9150611c9b82611c5a565b602082019050919050565b60006020820190508181036000830152611cbf81611c83565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d226025836115ba565b9150611d2d82611cc6565b604082019050919050565b60006020820190508181036000830152611d5181611d15565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611db46023836115ba565b9150611dbf82611d58565b604082019050919050565b60006020820190508181036000830152611de381611da7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e466026836115ba565b9150611e5182611dea565b604082019050919050565b60006020820190508181036000830152611e7581611e39565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611eb2601f836115ba565b9150611ebd82611e7c565b602082019050919050565b60006020820190508181036000830152611ee181611ea5565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611f29601783611ee8565b9150611f3482611ef3565b601782019050919050565b6000611f4a826115af565b611f548185611ee8565b9350611f648185602086016115cb565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611fa6601183611ee8565b9150611fb182611f70565b601182019050919050565b6000611fc782611f1c565b9150611fd38285611f3f565b9150611fde82611f99565b9150611fea8284611f3f565b91508190509392505050565b6000612001826116c8565b915061200c836116c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561204557612044611a1f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006120b9826116c8565b915060008214156120cd576120cc611a1f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061210e6020836115ba565b9150612119826120d8565b602082019050919050565b6000602082019050818103600083015261213d81612101565b905091905056fea2646970667358221220ea0e96cb8759785ce85fd17b1b58b5f63dd349dac94d93061b24a06d9d8fa87264736f6c63430008090033