60c060405260008055600060075560405180606001604052806035815260200162004e2b60359139600b90805190602001906200003e929190620002b3565b50610457600c556103e8600d556001600e60006101000a81548160ff0219169083151502179055503480156200007357600080fd5b506040518060400160405280601381526020017f4d63646f6e616c734170706c69636174696f6e000000000000000000000000008152506040518060400160405280600581526020017f4d434a4f420000000000000000000000000000000000000000000000000000008152506064600c54600081116200012b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012290620003d3565b60405180910390fd5b6000821162000171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016890620003b1565b60405180910390fd5b836001908051906020019062000189929190620002b3565b508260029080519060200190620001a2929190620002b3565b508160a08181525050806080818152505050505050620001d7620001cb620001e560201b60201c565b620001ed60201b60201c565b600160098190555062000509565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c19062000406565b90600052602060002090601f016020900481019282620002e5576000855562000331565b82601f106200030057805160ff191683800117855562000331565b8280016001018555821562000331579182015b828111156200033057825182559160200191906001019062000313565b5b50905062000340919062000344565b5090565b5b808211156200035f57600081600090555060010162000345565b5090565b600062000372602783620003f5565b91506200037f826200046b565b604082019050919050565b600062000399602e83620003f5565b9150620003a682620004ba565b604082019050919050565b60006020820190508181036000830152620003cc8162000363565b9050919050565b60006020820190508181036000830152620003ee816200038a565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200041f57607f821691505b602082108114156200043657620004356200043c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516148f16200053a600039600081816124b6015281816124df0152612a170152600050506148f16000f3fe6080604052600436106101f95760003560e01c80636352211e1161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd14610711578063d5abeb011461074e578063d7224ba014610779578063e985e9c5146107a4578063f2fde38b146107e1576101f9565b8063a0712d6814610678578063a22cb46514610694578063b88d4fde146106bd578063c6a91b42146106e6576101f9565b80637c928fe9116100dc5780637c928fe9146105ce5780638da5cb5b146105f757806395d89b4114610622578063982d669e1461064d576101f9565b80636352211e1461051257806370a082311461054f578063714c53981461058c578063715018a6146105b7576101f9565b806323b872dd116101905780633ccfd60b1161015f5780633ccfd60b1461044357806342842e0e1461045a57806349df728c146104835780634f6ccce7146104ac57806355f804b3146104e9576101f9565b806323b872dd1461037657806328cad13d1461039f5780632a55205a146103c85780632f745c5914610406576101f9565b8063095ea7b3116101cc578063095ea7b3146102ce5780630a00ae83146102f757806318160ddd146103205780631e84c4131461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b57806307e89ec014610266578063081812fc14610291575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906132ca565b61080a565b60405161023291906138f1565b60405180910390f35b34801561024757600080fd5b50610250610884565b60405161025d919061390c565b60405180910390f35b34801561027257600080fd5b5061027b610916565b6040516102889190613c6e565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b3919061339a565b610921565b6040516102c59190613861565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613230565b6109a6565b005b34801561030357600080fd5b5061031e6004803603810190610319919061339a565b610abf565b005b34801561032c57600080fd5b50610335610b45565b6040516103429190613c6e565b60405180910390f35b34801561035757600080fd5b50610360610b4e565b60405161036d91906138f1565b60405180910390f35b34801561038257600080fd5b5061039d6004803603810190610398919061311a565b610b61565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190613270565b610b71565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906133f4565b610c0a565b6040516103fd9291906138c8565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613230565b610c76565b60405161043a9190613c6e565b60405180910390f35b34801561044f57600080fd5b50610458610e74565b005b34801561046657600080fd5b50610481600480360381019061047c919061311a565b610f3f565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190613324565b610f5f565b005b3480156104b857600080fd5b506104d360048036038101906104ce919061339a565b6110fa565b6040516104e09190613c6e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613351565b61114d565b005b34801561051e57600080fd5b506105396004803603810190610534919061339a565b6111e3565b6040516105469190613861565b60405180910390f35b34801561055b57600080fd5b50610576600480360381019061057191906130ad565b6111f9565b6040516105839190613c6e565b60405180910390f35b34801561059857600080fd5b506105a16112e2565b6040516105ae919061390c565b60405180910390f35b3480156105c357600080fd5b506105cc611374565b005b3480156105da57600080fd5b506105f560048036038101906105f0919061339a565b6113fc565b005b34801561060357600080fd5b5061060c611599565b6040516106199190613861565b60405180910390f35b34801561062e57600080fd5b506106376115c3565b604051610644919061390c565b60405180910390f35b34801561065957600080fd5b50610662611655565b60405161066f9190613c6e565b60405180910390f35b610692600480360381019061068d919061339a565b61165b565b005b3480156106a057600080fd5b506106bb60048036038101906106b691906131f0565b611816565b005b3480156106c957600080fd5b506106e460048036038101906106df919061316d565b611997565b005b3480156106f257600080fd5b506106fb6119f3565b6040516107089190613c6e565b60405180910390f35b34801561071d57600080fd5b506107386004803603810190610733919061339a565b6119f8565b604051610745919061390c565b60405180910390f35b34801561075a57600080fd5b50610763611ad4565b6040516107709190613c6e565b60405180910390f35b34801561078557600080fd5b5061078e611ada565b60405161079b9190613c6e565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c691906130da565b611ae0565b6040516107d891906138f1565b60405180910390f35b3480156107ed57600080fd5b50610808600480360381019061080391906130ad565b611b74565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087d575061087c82611c6c565b5b9050919050565b60606001805461089390613fe5565b80601f01602080910402602001604051908101604052809291908181526020018280546108bf90613fe5565b801561090c5780601f106108e15761010080835404028352916020019161090c565b820191906000526020600020905b8154815290600101906020018083116108ef57829003601f168201915b5050505050905090565b662386f26fc1000081565b600061092c82611db6565b61096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096290613c2e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b1826111e3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990613aee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a41611dc3565b73ffffffffffffffffffffffffffffffffffffffff161480610a705750610a6f81610a6a611dc3565b611ae0565b5b610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613a2e565b60405180910390fd5b610aba838383611dcb565b505050565b610ac7611dc3565b73ffffffffffffffffffffffffffffffffffffffff16610ae5611599565b73ffffffffffffffffffffffffffffffffffffffff1614610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290613a8e565b60405180910390fd5b80600d8190555050565b60008054905090565b600e60009054906101000a900460ff1681565b610b6c838383611e7d565b505050565b610b79611dc3565b73ffffffffffffffffffffffffffffffffffffffff16610b97611599565b73ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490613a8e565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600080610c1684611db6565b610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90613a0e565b60405180910390fd5b30610c6b610c64856005612436565b606461244c565b915091509250929050565b6000610c81836111f9565b8210610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061392e565b60405180910390fd5b6000610ccc610b45565b905060008060005b83811015610e32576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610dc657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e1e5786841415610e0f578195505050505050610e6e565b8380610e1a90614048565b9450505b508080610e2a90614048565b915050610cd4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613bae565b60405180910390fd5b92915050565b610e7c611dc3565b73ffffffffffffffffffffffffffffffffffffffff16610e9a611599565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613a8e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f3b573d6000803e3d6000fd5b5050565b610f5a83838360405180602001604052806000815250611997565b505050565b610f67611dc3565b73ffffffffffffffffffffffffffffffffffffffff16610f85611599565b73ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290613a8e565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110169190613861565b60206040518083038186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906133c7565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016110a39291906138c8565b602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f5919061329d565b505050565b6000611104610b45565b8210611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061398e565b60405180910390fd5b819050919050565b611155611dc3565b73ffffffffffffffffffffffffffffffffffffffff16611173611599565b73ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090613a8e565b60405180910390fd5b80600b90805190602001906111df929190612e48565b5050565b60006111ee82612462565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190613a4e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6060600b80546112f190613fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461131d90613fe5565b801561136a5780601f1061133f5761010080835404028352916020019161136a565b820191906000526020600020905b81548152906001019060200180831161134d57829003601f168201915b5050505050905090565b61137c611dc3565b73ffffffffffffffffffffffffffffffffffffffff1661139a611599565b73ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e790613a8e565b60405180910390fd5b6113fa6000612665565b565b60026009541415611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990613bce565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff16611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613c0e565b60405180910390fd5b80600c54816114a6610b45565b6114b09190613d8e565b11156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e8906139ae565b60405180910390fd5b816005811115611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906139ee565b60405180910390fd5b600d54611541610b45565b1115611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990613b6e565b60405180910390fd5b61158c338461272b565b5050600160098190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546115d290613fe5565b80601f01602080910402602001604051908101604052809291908181526020018280546115fe90613fe5565b801561164b5780601f106116205761010080835404028352916020019161164b565b820191906000526020600020905b81548152906001019060200180831161162e57829003601f168201915b5050505050905090565b600d5481565b600260095414156116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613bce565b60405180910390fd5b6002600981905550662386f26fc1000081600d546116bd610b45565b1115611711573481836116d09190613e15565b14611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613b8e565b60405180910390fd5b5b600e60009054906101000a900460ff16611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613c0e565b60405180910390fd5b82600c548161176d610b45565b6117779190613d8e565b11156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af906139ae565b60405180910390fd5b8360058111156117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f4906139ee565b60405180910390fd5b611807338661272b565b50505050600160098190555050565b61181e611dc3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613aae565b60405180910390fd5b8060066000611899611dc3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611946611dc3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161198b91906138f1565b60405180910390a35050565b6119a2848484611e7d565b6119ae84848484612749565b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613b0e565b60405180910390fd5b50505050565b600581565b6060611a0382611db6565b611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613a0e565b60405180910390fd5b600b8054611a4f90613fe5565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7b90613fe5565b8015611ac85780601f10611a9d57610100808354040283529160200191611ac8565b820191906000526020600020905b815481529060010190602001808311611aab57829003601f168201915b50505050509050919050565b600c5481565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b7c611dc3565b73ffffffffffffffffffffffffffffffffffffffff16611b9a611599565b73ffffffffffffffffffffffffffffffffffffffff1614611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790613a8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c579061394e565b60405180910390fd5b611c6981612665565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d3757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d9f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611daf5750611dae826128e0565b5b9050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e8882612462565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611eaf611dc3565b73ffffffffffffffffffffffffffffffffffffffff161480611f0b5750611ed4611dc3565b73ffffffffffffffffffffffffffffffffffffffff16611ef384610921565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f275750611f268260000151611f21611dc3565b611ae0565b5b905080611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090613ace565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290613a6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906139ce565b60405180910390fd5b612058858585600161294a565b6120686000848460000151611dcb565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166120d69190613e6f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661217a9190613d48565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846122809190613d8e565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123c6576122f681611db6565b156123c5576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461242e8686866001612950565b505050505050565b600081836124449190613e15565b905092915050565b6000818361245a9190613de4565b905092915050565b61246a612ece565b61247382611db6565b6124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99061396e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106125165760017f0000000000000000000000000000000000000000000000000000000000000000846125099190613ea3565b6125139190613d8e565b90505b60008390505b818110612624576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461261057809350505050612660565b50808061261c90613fbb565b91505061251c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790613bee565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612745828260405180602001604052806000815250612956565b5050565b600061276a8473ffffffffffffffffffffffffffffffffffffffff16612e35565b156128d3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612793611dc3565b8786866040518563ffffffff1660e01b81526004016127b5949392919061387c565b602060405180830381600087803b1580156127cf57600080fd5b505af192505050801561280057506040513d601f19601f820116820180604052508101906127fd91906132f7565b60015b612883573d8060008114612830576040519150601f19603f3d011682016040523d82523d6000602084013e612835565b606091505b5060008151141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290613b0e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d8565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c390613b4e565b60405180910390fd5b6129d581611db6565b15612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c90613b2e565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90613c4e565b60405180910390fd5b612a85600085838661294a565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b829190613d48565b6fffffffffffffffffffffffffffffffff168152602001858360200151612ba99190613d48565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612e1857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db86000888488612749565b612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee90613b0e565b60405180910390fd5b8180612e0290614048565b9250508080612e1090614048565b915050612d47565b5080600081905550612e2d6000878588612950565b505050505050565b600080823b905060008111915050919050565b828054612e5490613fe5565b90600052602060002090601f016020900481019282612e765760008555612ebd565b82601f10612e8f57805160ff1916838001178555612ebd565b82800160010185558215612ebd579182015b82811115612ebc578251825591602001919060010190612ea1565b5b509050612eca9190612f08565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f21576000816000905550600101612f09565b5090565b6000612f38612f3384613cae565b613c89565b905082815260208101848484011115612f5457612f53614152565b5b612f5f848285613f79565b509392505050565b6000612f7a612f7584613cdf565b613c89565b905082815260208101848484011115612f9657612f95614152565b5b612fa1848285613f79565b509392505050565b600081359050612fb881614848565b92915050565b600081359050612fcd8161485f565b92915050565b600081519050612fe28161485f565b92915050565b600081359050612ff781614876565b92915050565b60008151905061300c81614876565b92915050565b600082601f8301126130275761302661414d565b5b8135613037848260208601612f25565b91505092915050565b60008135905061304f8161488d565b92915050565b600082601f83011261306a5761306961414d565b5b813561307a848260208601612f67565b91505092915050565b600081359050613092816148a4565b92915050565b6000815190506130a7816148a4565b92915050565b6000602082840312156130c3576130c261415c565b5b60006130d184828501612fa9565b91505092915050565b600080604083850312156130f1576130f061415c565b5b60006130ff85828601612fa9565b925050602061311085828601612fa9565b9150509250929050565b6000806000606084860312156131335761313261415c565b5b600061314186828701612fa9565b935050602061315286828701612fa9565b925050604061316386828701613083565b9150509250925092565b600080600080608085870312156131875761318661415c565b5b600061319587828801612fa9565b94505060206131a687828801612fa9565b93505060406131b787828801613083565b925050606085013567ffffffffffffffff8111156131d8576131d7614157565b5b6131e487828801613012565b91505092959194509250565b600080604083850312156132075761320661415c565b5b600061321585828601612fa9565b925050602061322685828601612fbe565b9150509250929050565b600080604083850312156132475761324661415c565b5b600061325585828601612fa9565b925050602061326685828601613083565b9150509250929050565b6000602082840312156132865761328561415c565b5b600061329484828501612fbe565b91505092915050565b6000602082840312156132b3576132b261415c565b5b60006132c184828501612fd3565b91505092915050565b6000602082840312156132e0576132df61415c565b5b60006132ee84828501612fe8565b91505092915050565b60006020828403121561330d5761330c61415c565b5b600061331b84828501612ffd565b91505092915050565b60006020828403121561333a5761333961415c565b5b600061334884828501613040565b91505092915050565b6000602082840312156133675761336661415c565b5b600082013567ffffffffffffffff81111561338557613384614157565b5b61339184828501613055565b91505092915050565b6000602082840312156133b0576133af61415c565b5b60006133be84828501613083565b91505092915050565b6000602082840312156133dd576133dc61415c565b5b60006133eb84828501613098565b91505092915050565b6000806040838503121561340b5761340a61415c565b5b600061341985828601613083565b925050602061342a85828601613083565b9150509250929050565b61343d81613ed7565b82525050565b61344c81613ee9565b82525050565b600061345d82613d10565b6134678185613d26565b9350613477818560208601613f88565b61348081614161565b840191505092915050565b600061349682613d1b565b6134a08185613d37565b93506134b0818560208601613f88565b6134b981614161565b840191505092915050565b60006134d1602283613d37565b91506134dc82614172565b604082019050919050565b60006134f4602683613d37565b91506134ff826141c1565b604082019050919050565b6000613517602a83613d37565b915061352282614210565b604082019050919050565b600061353a602383613d37565b91506135458261425f565b604082019050919050565b600061355d602283613d37565b9150613568826142ae565b604082019050919050565b6000613580602583613d37565b915061358b826142fd565b604082019050919050565b60006135a3602283613d37565b91506135ae8261434c565b604082019050919050565b60006135c6601183613d37565b91506135d18261439b565b602082019050919050565b60006135e9603983613d37565b91506135f4826143c4565b604082019050919050565b600061360c602b83613d37565b915061361782614413565b604082019050919050565b600061362f602683613d37565b915061363a82614462565b604082019050919050565b6000613652602083613d37565b915061365d826144b1565b602082019050919050565b6000613675601a83613d37565b9150613680826144da565b602082019050919050565b6000613698603283613d37565b91506136a382614503565b604082019050919050565b60006136bb602283613d37565b91506136c682614552565b604082019050919050565b60006136de603383613d37565b91506136e9826145a1565b604082019050919050565b6000613701601d83613d37565b915061370c826145f0565b602082019050919050565b6000613724602183613d37565b915061372f82614619565b604082019050919050565b6000613747601c83613d37565b915061375282614668565b602082019050919050565b600061376a601883613d37565b915061377582614691565b602082019050919050565b600061378d602e83613d37565b9150613798826146ba565b604082019050919050565b60006137b0601f83613d37565b91506137bb82614709565b602082019050919050565b60006137d3602f83613d37565b91506137de82614732565b604082019050919050565b60006137f6601783613d37565b915061380182614781565b602082019050919050565b6000613819602d83613d37565b9150613824826147aa565b604082019050919050565b600061383c602283613d37565b9150613847826147f9565b604082019050919050565b61385b81613f6f565b82525050565b60006020820190506138766000830184613434565b92915050565b60006080820190506138916000830187613434565b61389e6020830186613434565b6138ab6040830185613852565b81810360608301526138bd8184613452565b905095945050505050565b60006040820190506138dd6000830185613434565b6138ea6020830184613852565b9392505050565b60006020820190506139066000830184613443565b92915050565b60006020820190508181036000830152613926818461348b565b905092915050565b60006020820190508181036000830152613947816134c4565b9050919050565b60006020820190508181036000830152613967816134e7565b9050919050565b600060208201905081810360008301526139878161350a565b9050919050565b600060208201905081810360008301526139a78161352d565b9050919050565b600060208201905081810360008301526139c781613550565b9050919050565b600060208201905081810360008301526139e781613573565b9050919050565b60006020820190508181036000830152613a0781613596565b9050919050565b60006020820190508181036000830152613a27816135b9565b9050919050565b60006020820190508181036000830152613a47816135dc565b9050919050565b60006020820190508181036000830152613a67816135ff565b9050919050565b60006020820190508181036000830152613a8781613622565b9050919050565b60006020820190508181036000830152613aa781613645565b9050919050565b60006020820190508181036000830152613ac781613668565b9050919050565b60006020820190508181036000830152613ae78161368b565b9050919050565b60006020820190508181036000830152613b07816136ae565b9050919050565b60006020820190508181036000830152613b27816136d1565b9050919050565b60006020820190508181036000830152613b47816136f4565b9050919050565b60006020820190508181036000830152613b6781613717565b9050919050565b60006020820190508181036000830152613b878161373a565b9050919050565b60006020820190508181036000830152613ba78161375d565b9050919050565b60006020820190508181036000830152613bc781613780565b9050919050565b60006020820190508181036000830152613be7816137a3565b9050919050565b60006020820190508181036000830152613c07816137c6565b9050919050565b60006020820190508181036000830152613c27816137e9565b9050919050565b60006020820190508181036000830152613c478161380c565b9050919050565b60006020820190508181036000830152613c678161382f565b9050919050565b6000602082019050613c836000830184613852565b92915050565b6000613c93613ca4565b9050613c9f8282614017565b919050565b6000604051905090565b600067ffffffffffffffff821115613cc957613cc861411e565b5b613cd282614161565b9050602081019050919050565b600067ffffffffffffffff821115613cfa57613cf961411e565b5b613d0382614161565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d5382613f33565b9150613d5e83613f33565b9250826fffffffffffffffffffffffffffffffff03821115613d8357613d82614091565b5b828201905092915050565b6000613d9982613f6f565b9150613da483613f6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dd957613dd8614091565b5b828201905092915050565b6000613def82613f6f565b9150613dfa83613f6f565b925082613e0a57613e096140c0565b5b828204905092915050565b6000613e2082613f6f565b9150613e2b83613f6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6457613e63614091565b5b828202905092915050565b6000613e7a82613f33565b9150613e8583613f33565b925082821015613e9857613e97614091565b5b828203905092915050565b6000613eae82613f6f565b9150613eb983613f6f565b925082821015613ecc57613ecb614091565b5b828203905092915050565b6000613ee282613f4f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613f2c82613ed7565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613fa6578082015181840152602081019050613f8b565b83811115613fb5576000848401525b50505050565b6000613fc682613f6f565b91506000821415613fda57613fd9614091565b5b600182039050919050565b60006002820490506001821680613ffd57607f821691505b60208210811415614011576140106140ef565b5b50919050565b61402082614161565b810181811067ffffffffffffffff8211171561403f5761403e61411e565b5b80604052505050565b600061405382613f6f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408657614085614091565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768206d696e74732072656d61696e696e6720746f206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e747320706572207472616e73616374696f6e2065786365656460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682066726565206d696e74732072656d61696e00000000600082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61485181613ed7565b811461485c57600080fd5b50565b61486881613ee9565b811461487357600080fd5b50565b61487f81613ef5565b811461488a57600080fd5b50565b61489681613f21565b81146148a157600080fd5b50565b6148ad81613f6f565b81146148b857600080fd5b5056fea264697066735822122053bec1fbcc50ac99024a686587c833479da94ad19247fd9678131ca413398eba64736f6c63430008070033697066733a2f2f516d63726a555a73715235534535644d6d4c6844654c3877774747594e3335514a6e625266724d6577554c455142