0x60806040526014600c5534801561001557600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612182806100bd6000396000f3fe60806040526004361061011f5760003560e01c806388cedbc4116100a0578063c861eb6c11610064578063c861eb6c146103f6578063ce1dd23a14610433578063d643905e14610470578063d98b9bb5146104ad578063f9a06b5e146104c95761011f565b806388cedbc4146103195780638da5cb5b14610335578063a28835b614610360578063a5d097081461039d578063c5ee0541146103da5761011f565b806346d02934116100e757806346d029341461021d5780635138b08c1461025a57806363a846f81461027657806370480275146102b357806372aa0240146102dc5761011f565b80631785f53c146101245780632c7e632b1461014d578063331766d6146101785780633ccfd60b146101b55780633dad1204146101e0575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611a84565b610506565b005b34801561015957600080fd5b506101626105f0565b60405161016f9190611dca565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190611b18565b6105f6565b6040516101ac9190611cd4565b60405180910390f35b3480156101c157600080fd5b506101ca610638565b6040516101d79190611cef565b60405180910390f35b3480156101ec57600080fd5b5061020760048036038101906102029190611b58565b61071b565b6040516102149190611dca565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611b58565b61074d565b6040516102519190611dca565b60405180910390f35b610274600480360381019061026f9190611b18565b61077f565b005b34801561028257600080fd5b5061029d60048036038101906102989190611a84565b610bfd565b6040516102aa9190611cef565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190611a84565b610c1d565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190611b18565b610d07565b6040516103109190611dca565b60405180910390f35b610333600480360381019061032e9190611b18565b610d2c565b005b34801561034157600080fd5b5061034a610e6f565b6040516103579190611cd4565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190611a84565b610e95565b6040516103949190611cef565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190611b18565b611065565b6040516103d19190611cd4565b60405180910390f35b6103f460048036038101906103ef9190611ab1565b6110a7565b005b34801561040257600080fd5b5061041d60048036038101906104189190611b18565b6112e4565b60405161042a9190611dca565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190611b18565b611309565b6040516104679190611dca565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190611b58565b61132e565b6040516104a49190611cb9565b60405180910390f35b6104c760048036038101906104c29190611b18565b61137d565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190611b18565b611a16565b6040516104fd9190611cef565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d90611daa565b60405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610713576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610711573d6000803e3d6000fd5b505b600191505090565b600560205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061082a5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090611daa565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615610907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fe90611d4a565b60405180910390fd5b42600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054111561099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099190611d2a565b60405180910390fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905060008111610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611d0a565b60405180910390fd5b60006064600c5483610aad9190611e7d565b610ab79190611e4c565b905060008183610ac79190611ed7565b905060008111610ad657600080fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b8c573d6000803e3d6000fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610bf5573d6000803e3d6000fd5b505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490611daa565b60405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610dd75750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90611daa565b60405180910390fd5b42600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610f425750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890611daa565b60405180910390fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561105b576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611059573d6000803e3d6000fd5b505b6001915050919050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806111525750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890611daa565b60405180910390fd5b83600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff02191690831515021790555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6009602052816000526040600020602052806000526040600020600091509150505481565b6004602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff161561141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290611d8a565b60405180910390fd5b42600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054116114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490611d8a565b60405180910390fd5b34600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020541161153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690611d6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561163c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054115b1561175857600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117509190611df6565b925050819055505b34600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555033600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600081548092919061189f90611f65565b91905055905034600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008381526020019081526020016000208190555033600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002081905550505050565b600a6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600081359050611a5481612107565b92915050565b600081359050611a698161211e565b92915050565b600081359050611a7e81612135565b92915050565b600060208284031215611a9a57611a9961200c565b5b6000611aa884828501611a45565b91505092915050565b60008060008060808587031215611acb57611aca61200c565b5b6000611ad987828801611a5a565b9450506020611aea87828801611a45565b9350506040611afb87828801611a6f565b9250506060611b0c87828801611a6f565b91505092959194509250565b60008060408385031215611b2f57611b2e61200c565b5b6000611b3d85828601611a45565b9250506020611b4e85828601611a6f565b9150509250929050565b600080600060608486031215611b7157611b7061200c565b5b6000611b7f86828701611a45565b9350506020611b9086828701611a6f565b9250506040611ba186828701611a6f565b9150509250925092565b611bb481611f1d565b82525050565b611bc381611f0b565b82525050565b611bd281611f2f565b82525050565b6000611be5600b83611de5565b9150611bf082612011565b602082019050919050565b6000611c08601083611de5565b9150611c138261203a565b602082019050919050565b6000611c2b601183611de5565b9150611c3682612063565b602082019050919050565b6000611c4e601383611de5565b9150611c598261208c565b602082019050919050565b6000611c71601083611de5565b9150611c7c826120b5565b602082019050919050565b6000611c94600e83611de5565b9150611c9f826120de565b602082019050919050565b611cb381611f5b565b82525050565b6000602082019050611cce6000830184611bba565b92915050565b6000602082019050611ce96000830184611bab565b92915050565b6000602082019050611d046000830184611bc9565b92915050565b60006020820190508181036000830152611d2381611bd8565b9050919050565b60006020820190508181036000830152611d4381611bfb565b9050919050565b60006020820190508181036000830152611d6381611c1e565b9050919050565b60006020820190508181036000830152611d8381611c41565b9050919050565b60006020820190508181036000830152611da381611c64565b9050919050565b60006020820190508181036000830152611dc381611c87565b9050919050565b6000602082019050611ddf6000830184611caa565b92915050565b600082825260208201905092915050565b6000611e0182611f5b565b9150611e0c83611f5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e4157611e40611fae565b5b828201905092915050565b6000611e5782611f5b565b9150611e6283611f5b565b925082611e7257611e71611fdd565b5b828204905092915050565b6000611e8882611f5b565b9150611e9383611f5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ecc57611ecb611fae565b5b828202905092915050565b6000611ee282611f5b565b9150611eed83611f5b565b925082821015611f0057611eff611fae565b5b828203905092915050565b6000611f1682611f3b565b9050919050565b6000611f2882611f3b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611f7082611f5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611fa357611fa2611fae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b7f4e6f206f6e652062696473000000000000000000000000000000000000000000600082015250565b7f61756374696f6e206e6f74206f76657200000000000000000000000000000000600082015250565b7f61756374696f6e2068617320656e646564000000000000000000000000000000600082015250565b7f4e6f74206869676820656e6f7567682062696400000000000000000000000000600082015250565b7f61756374696f6e20697320656e64656400000000000000000000000000000000600082015250565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b61211081611f0b565b811461211b57600080fd5b50565b61212781611f1d565b811461213257600080fd5b50565b61213e81611f5b565b811461214957600080fd5b5056fea2646970667358221220eba519a85808b3999e404cc6c28e758bcea354479f7d4ddcb2cfa27d2f0f36e964736f6c63430008060033