0x608060405234801561000f575f80fd5b50336040518060400160405280600381526020017f53616400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5341440000000000000000000000000000000000000000000000000000000000815250816003908161008c91906106e0565b50806004908161009c91906106e0565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010691906107ee565b60405180910390fd5b61011e8161014560201b60201c565b505f6b204fce5e3e25026110000000905061013f338261020860201b60201c565b506108c4565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610278575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161026f91906107ee565b60405180910390fd5b6102895f838361028d60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102dd578060025f8282546102d19190610834565b925050819055506103ab565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610366578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161035d93929190610876565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103f2578060025f828254039250508190555061043c565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161049991906108ab565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061052157607f821691505b602082108103610534576105336104dd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261055b565b6105a0868361055b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6105e46105df6105da846105b8565b6105c1565b6105b8565b9050919050565b5f819050919050565b6105fd836105ca565b610611610609826105eb565b848454610567565b825550505050565b5f90565b610625610619565b6106308184846105f4565b505050565b5b81811015610653576106485f8261061d565b600181019050610636565b5050565b601f821115610698576106698161053a565b6106728461054c565b81016020851015610681578190505b61069561068d8561054c565b830182610635565b50505b505050565b5f82821c905092915050565b5f6106b85f198460080261069d565b1980831691505092915050565b5f6106d083836106a9565b9150826002028217905092915050565b6106e9826104a6565b67ffffffffffffffff811115610702576107016104b0565b5b61070c825461050a565b610717828285610657565b5f60209050601f831160018114610748575f8415610736578287015190505b61074085826106c5565b8655506107a7565b601f1984166107568661053a565b5f5b8281101561077d57848901518255600182019150602085019450602081019050610758565b8683101561079a5784890151610796601f8916826106a9565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107d8826107af565b9050919050565b6107e8816107ce565b82525050565b5f6020820190506108015f8301846107df565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61083e826105b8565b9150610849836105b8565b925082820190508082111561086157610860610807565b5b92915050565b610870816105b8565b82525050565b5f6060820190506108895f8301866107df565b6108966020830185610867565b6108a36040830184610867565b949350505050565b5f6020820190506108be5f830184610867565b92915050565b6111c2806108d15f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063715018a611610095578063a9059cbb11610064578063a9059cbb1461025f578063dd62ed3e1461028f578063f2fde38b146102bf578063fa2f7a8f146102db576100f3565b8063715018a6146101fd57806379cc6790146102075780638da5cb5b1461022357806395d89b4114610241576100f3565b806323b872dd116100d157806323b872dd14610163578063313ce5671461019357806342966c68146101b157806370a08231146101cd576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff6102e5565b60405161010c9190610e10565b60405180910390f35b61012f600480360381019061012a9190610ec1565b610375565b60405161013c9190610f19565b60405180910390f35b61014d610397565b60405161015a9190610f41565b60405180910390f35b61017d60048036038101906101789190610f5a565b6103a0565b60405161018a9190610f19565b60405180910390f35b61019b6103ce565b6040516101a89190610fc5565b60405180910390f35b6101cb60048036038101906101c69190610fde565b6103d6565b005b6101e760048036038101906101e29190611009565b6103ea565b6040516101f49190610f41565b60405180910390f35b61020561042f565b005b610221600480360381019061021c9190610ec1565b610442565b005b61022b610462565b6040516102389190611043565b60405180910390f35b61024961048a565b6040516102569190610e10565b60405180910390f35b61027960048036038101906102749190610ec1565b61051a565b6040516102869190610f19565b60405180910390f35b6102a960048036038101906102a4919061105c565b61053c565b6040516102b69190610f41565b60405180910390f35b6102d960048036038101906102d49190611009565b6105be565b005b6102e3610642565b005b6060600380546102f4906110c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610320906110c7565b801561036b5780601f106103425761010080835404028352916020019161036b565b820191905f5260205f20905b81548152906001019060200180831161034e57829003601f168201915b5050505050905090565b5f8061037f610654565b905061038c81858561065b565b600191505092915050565b5f600254905090565b5f806103aa610654565b90506103b785828561066d565b6103c28585856106ff565b60019150509392505050565b5f6012905090565b6103e76103e1610654565b826107ef565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61043761086e565b6104405f6108f5565b565b6104548261044e610654565b8361066d565b61045e82826107ef565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610499906110c7565b80601f01602080910402602001604051908101604052809291908181526020018280546104c5906110c7565b80156105105780601f106104e757610100808354040283529160200191610510565b820191905f5260205f20905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b5f80610524610654565b90506105318185856106ff565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6105c661086e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610636575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161062d9190611043565b60405180910390fd5b61063f816108f5565b50565b61064a61086e565b61065261042f565b565b5f33905090565b61066883838360016109b8565b505050565b5f610678848461053c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106f957818110156106ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106e1939291906110f7565b60405180910390fd5b6106f884848484035f6109b8565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361076f575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107669190611043565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107df575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107d69190611043565b60405180910390fd5b6107ea838383610b87565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085f575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108569190611043565b60405180910390fd5b61086a825f83610b87565b5050565b610876610654565b73ffffffffffffffffffffffffffffffffffffffff16610894610462565b73ffffffffffffffffffffffffffffffffffffffff16146108f3576108b7610654565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108ea9190611043565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a28575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a1f9190611043565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a98575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a8f9190611043565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b81578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b789190610f41565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bd7578060025f828254610bcb9190611159565b92505081905550610ca5565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c60578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c57939291906110f7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cec578060025f8282540392505081905550610d36565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d939190610f41565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610de282610da0565b610dec8185610daa565b9350610dfc818560208601610dba565b610e0581610dc8565b840191505092915050565b5f6020820190508181035f830152610e288184610dd8565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e5d82610e34565b9050919050565b610e6d81610e53565b8114610e77575f80fd5b50565b5f81359050610e8881610e64565b92915050565b5f819050919050565b610ea081610e8e565b8114610eaa575f80fd5b50565b5f81359050610ebb81610e97565b92915050565b5f8060408385031215610ed757610ed6610e30565b5b5f610ee485828601610e7a565b9250506020610ef585828601610ead565b9150509250929050565b5f8115159050919050565b610f1381610eff565b82525050565b5f602082019050610f2c5f830184610f0a565b92915050565b610f3b81610e8e565b82525050565b5f602082019050610f545f830184610f32565b92915050565b5f805f60608486031215610f7157610f70610e30565b5b5f610f7e86828701610e7a565b9350506020610f8f86828701610e7a565b9250506040610fa086828701610ead565b9150509250925092565b5f60ff82169050919050565b610fbf81610faa565b82525050565b5f602082019050610fd85f830184610fb6565b92915050565b5f60208284031215610ff357610ff2610e30565b5b5f61100084828501610ead565b91505092915050565b5f6020828403121561101e5761101d610e30565b5b5f61102b84828501610e7a565b91505092915050565b61103d81610e53565b82525050565b5f6020820190506110565f830184611034565b92915050565b5f806040838503121561107257611071610e30565b5b5f61107f85828601610e7a565b925050602061109085828601610e7a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806110de57607f821691505b6020821081036110f1576110f061109a565b5b50919050565b5f60608201905061110a5f830186611034565b6111176020830185610f32565b6111246040830184610f32565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61116382610e8e565b915061116e83610e8e565b92508282019050808211156111865761118561112c565b5b9291505056fea2646970667358221220a584313434d9d3b6213a3c0beea73c95419ba11becd703cd3688b659bad1170a64736f6c634300081a0033