60806040526000600c55600a600d60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503480156200004857600080fd5b5060405162005b1038038062005b1083398181016040528101906200006e919062000546565b6040518060400160405280600b81526020017f576f6d626f20447265616d0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f57424f00000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000f29291906200047f565b5080600390805190602001906200010b9291906200047f565b5050506000600960006101000a81548160ff021916908315150217905550620001496200013d620001da60201b60201c565b620001e260201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001d36200019e620002a860201b60201c565b6064600d60009054906101000a90046bffffffffffffffffffffffff16620001c791906200061b565b620002d260201b60201c565b50620007df565b600033905090565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620002e26200047560201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000343576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033a90620005c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ad90620005e8565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b8280546200048d90620006b4565b90600052602060002090601f016020900481019282620004b15760008555620004fd565b82601f10620004cc57805160ff1916838001178555620004fd565b82800160010185558215620004fd579182015b82811115620004fc578251825591602001919060010190620004df565b5b5090506200050c919062000510565b5090565b5b808211156200052b57600081600090555060010162000511565b5090565b6000815190506200054081620007c5565b92915050565b6000602082840312156200055f576200055e62000748565b5b60006200056f848285016200052f565b91505092915050565b600062000587602a836200060a565b915062000594826200074d565b604082019050919050565b6000620005ae6019836200060a565b9150620005bb826200079c565b602082019050919050565b60006020820190508181036000830152620005e18162000578565b9050919050565b6000602082019050818103600083015262000603816200059f565b9050919050565b600082825260208201905092915050565b600062000628826200069c565b915062000635836200069c565b9250816bffffffffffffffffffffffff04831182151516156200065d576200065c620006ea565b5b828202905092915050565b600062000675826200067c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b60006002820490506001821680620006cd57607f821691505b60208210811415620006e457620006e362000719565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b620007d08162000668565b8114620007dc57600080fd5b50565b61532180620007ef6000396000f3fe6080604052600436106101c25760003560e01c80636352211e116100f75780638f40522111610095578063c87b56dd11610064578063c87b56dd14610608578063d691e43c14610645578063e985e9c51461066e578063f2fde38b146106ab576101c2565b80638f4052211461056257806395d89b411461058b578063a22cb465146105b6578063b88d4fde146105df576101c2565b8063715018a6116100d1578063715018a6146104e057806384017e52146104f75780638456cb59146105205780638da5cb5b14610537576101c2565b80636352211e1461042957806366f9cff21461046657806370a08231146104a3576101c2565b8063391f88ca1161016457806342842e0e1161013e57806342842e0e1461039057806342966c68146103b9578063532b77b3146103e25780635c975abb146103fe576101c2565b8063391f88ca146103395780633ccfd60b146103625780633f4ba83a14610379576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806323b872dd14610295578063258ae582146102be5780632a55205a146102fb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906137b4565b6106d4565b6040516101fb919061403b565b60405180910390f35b34801561021057600080fd5b506102196106e6565b604051610226919061409b565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613940565b610778565b6040516102639190613fab565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e919061361d565b6107fd565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613507565b610915565b005b3480156102ca57600080fd5b506102e560048036038101906102e09190613758565b610975565b6040516102f2919061403b565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d919061396d565b610a60565b604051610330929190614012565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b919061380e565b610c4b565b005b34801561036e57600080fd5b50610377610cd7565b005b34801561038557600080fd5b5061038e610dd3565b005b34801561039c57600080fd5b506103b760048036038101906103b29190613507565b610e59565b005b3480156103c557600080fd5b506103e060048036038101906103db9190613940565b610e79565b005b6103fc60048036038101906103f79190613899565b610ed5565b005b34801561040a57600080fd5b50610413610feb565b604051610420919061403b565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613940565b611002565b60405161045d9190613fab565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613940565b6110b4565b60405161049a919061409b565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c5919061349a565b6111a4565b6040516104d791906144e2565b60405180910390f35b3480156104ec57600080fd5b506104f561125c565b005b34801561050357600080fd5b5061051e60048036038101906105199190613940565b6112e4565b005b34801561052c57600080fd5b5061053561136a565b005b34801561054357600080fd5b5061054c6113f0565b6040516105599190613fab565b60405180910390f35b34801561056e57600080fd5b506105896004803603810190610584919061369d565b61141a565b005b34801561059757600080fd5b506105a06115dd565b6040516105ad919061409b565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906135dd565b61166f565b005b3480156105eb57600080fd5b506106066004803603810190610601919061355a565b611685565b005b34801561061457600080fd5b5061062f600480360381019061062a9190613940565b6116e7565b60405161063c919061409b565b60405180910390f35b34801561065157600080fd5b5061066c6004803603810190610667919061365d565b6116f9565b005b34801561067a57600080fd5b50610695600480360381019061069091906134c7565b611783565b6040516106a2919061403b565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd919061349a565b611817565b005b60006106df8261190f565b9050919050565b6060600280546106f590614824565b80601f016020809104026020016040519081016040528092919081815260200182805461072190614824565b801561076e5780601f106107435761010080835404028352916020019161076e565b820191906000526020600020905b81548152906001019060200180831161075157829003601f168201915b5050505050905090565b600061078382611921565b6107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990614342565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080882611002565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610870906143c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661089861198d565b73ffffffffffffffffffffffffffffffffffffffff1614806108c757506108c6816108c161198d565b611783565b5b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614282565b60405180910390fd5b6109108383611995565b505050565b61092661092061198d565b82611a4e565b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c90614402565b60405180910390fd5b610970838383611b2c565b505050565b60008060008061098485611d93565b92509250925060008660405160200161099d9190613f70565b604051602081830303815290604052805190602001209050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018284878760405160008152602001604052604051610a119493929190614056565b6020604051602081039080840390855afa158015610a33573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161494505050505092915050565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610bf65760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c00611dfb565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610c2c91906146b1565b610c369190614680565b90508160000151819350935050509250929050565b610c5361198d565b73ffffffffffffffffffffffffffffffffffffffff16610c716113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90614362565b60405180910390fd5b610cd2838383611e05565b505050565b610cdf61198d565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90614362565b60405180910390fd5b6000610d5d6113f0565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d8090613f96565b60006040518083038185875af1925050503d8060008114610dbd576040519150601f19603f3d011682016040523d82523d6000602084013e610dc2565b606091505b5050905080610dd057600080fd5b50565b610ddb61198d565b73ffffffffffffffffffffffffffffffffffffffff16610df96113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690614362565b60405180910390fd5b610e57611f53565b565b610e7483838360405180602001604052806000815250611685565b505050565b610e8a610e8461198d565b82611a4e565b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090614482565b60405180910390fd5b610ed281611ff5565b50565b610edd610feb565b15610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490614242565b60405180910390fd5b600c54341015610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614382565b60405180910390fd5b6000833383604051602001610f79939291906140bd565b604051602081830303815290604052805190602001209050610f9b8184610975565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd1906144a2565b60405180910390fd5b610fe5843384611e05565b50505050565b6000600960009054906101000a900460ff16905090565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a2906142c2565b60405180910390fd5b80915050919050565b60606000600f600084815260200190815260200160002080546110d690614824565b80601f016020809104026020016040519081016040528092919081815260200182805461110290614824565b801561114f5780601f106111245761010080835404028352916020019161114f565b820191906000526020600020905b81548152906001019060200180831161113257829003601f168201915b5050505050905060008151141561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614262565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906142a2565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126461198d565b73ffffffffffffffffffffffffffffffffffffffff166112826113f0565b73ffffffffffffffffffffffffffffffffffffffff16146112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90614362565b60405180910390fd5b6112e26000612001565b565b6112ec61198d565b73ffffffffffffffffffffffffffffffffffffffff1661130a6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614362565b60405180910390fd5b80600c8190555050565b61137261198d565b73ffffffffffffffffffffffffffffffffffffffff166113906113f0565b73ffffffffffffffffffffffffffffffffffffffff16146113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90614362565b60405180910390fd5b6113ee6120c7565b565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142261198d565b73ffffffffffffffffffffffffffffffffffffffff166114406113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614362565b60405180910390fd5b808451146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614222565b60405180910390fd5b8083511461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614222565b60405180910390fd5b8082511461155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155690614102565b60405180910390fd5b60005b818110156115d6576115c38582815181106115805761157f614998565b5b602002602001015185838151811061159b5761159a614998565b5b60200260200101518584815181106115b6576115b5614998565b5b6020026020010151610c4b565b80806115ce90614887565b915050611562565b5050505050565b6060600380546115ec90614824565b80601f016020809104026020016040519081016040528092919081815260200182805461161890614824565b80156116655780601f1061163a57610100808354040283529160200191611665565b820191906000526020600020905b81548152906001019060200180831161164857829003601f168201915b5050505050905090565b61168161167a61198d565b838361216a565b5050565b61169661169061198d565b83611a4e565b6116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90614402565b60405180910390fd5b6116e1848484846122d7565b50505050565b60606116f282612333565b9050919050565b61170161198d565b73ffffffffffffffffffffffffffffffffffffffff1661171f6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90614362565b60405180910390fd5b61177f8282612485565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61181f61198d565b73ffffffffffffffffffffffffffffffffffffffff1661183d6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90614362565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614162565b60405180910390fd5b61190c81612001565b50565b600061191a8261261a565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0883611002565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a5982611921565b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614202565b60405180910390fd5b6000611aa383611002565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ae55750611ae48185611783565b5b80611b2357508373ffffffffffffffffffffffffffffffffffffffff16611b0b84610778565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4c82611002565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614182565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906141c2565b60405180910390fd5b611c1d8383836126fc565b611c28600082611995565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c78919061470b565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ccf919061462a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8e838383612754565b505050565b60008060006041845114611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390614442565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b6000612710905090565b600e81604051611e159190613f35565b908152602001604051809103902060009054906101000a900460ff1615611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890614462565b60405180910390fd5b600081511415611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead906143e2565b60405180910390fd5b6001600e82604051611ec89190613f35565b908152602001604051809103902060006101000a81548160ff021916908315150217905550611f0082611efb600a612759565b612767565b611f13611f0d600a612759565b84612785565b80600f6000611f22600a612759565b81526020019081526020016000209080519060200190611f439291906130ea565b50611f4e600a6127f9565b505050565b611f5b610feb565b611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190614122565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611fde61198d565b604051611feb9190613fab565b60405180910390a1565b611ffe8161280f565b50565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120cf610feb565b1561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690614242565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861215361198d565b6040516121609190613fab565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d0906141e2565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122ca919061403b565b60405180910390a3505050565b6122e2848484611b2c565b6122ee84848484612824565b61232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614142565b60405180910390fd5b50505050565b606061233e82611921565b61237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614322565b60405180910390fd5b600060086000848152602001908152602001600020805461239d90614824565b80601f01602080910402602001604051908101604052809291908181526020018280546123c990614824565b80156124165780601f106123eb57610100808354040283529160200191612416565b820191906000526020600020905b8154815290600101906020018083116123f957829003601f168201915b5050505050905060006124276129bb565b905060008151141561243d578192505050612480565b60008251111561247257808260405160200161245a929190613f4c565b60405160208183030381529060405292505050612480565b61247b846129d2565b925050505b919050565b61248d611dfb565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614422565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561255b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612552906144c2565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126e557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126f557506126f482612a79565b5b9050919050565b612704610feb565b15612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90614242565b60405180910390fd5b61274f838383612af3565b505050565b505050565b600081600001549050919050565b612781828260405180602001604052806000815250612af8565b5050565b61278e82611921565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c4906142e2565b60405180910390fd5b806008600084815260200190815260200160002090805190602001906127f49291906130ea565b505050565b6001816000016000828254019250508190555050565b61281881612b53565b61282181612ba6565b50565b60006128458473ffffffffffffffffffffffffffffffffffffffff16612c05565b156129ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261286e61198d565b8786866040518563ffffffff1660e01b81526004016128909493929190613fc6565b602060405180830381600087803b1580156128aa57600080fd5b505af19250505080156128db57506040513d601f19601f820116820180604052508101906128d891906137e1565b60015b61295e573d806000811461290b576040519150601f19603f3d011682016040523d82523d6000602084013e612910565b606091505b50600081511415612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614142565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129b3565b600190505b949350505050565b606060405180602001604052806000815250905090565b60606129dd82611921565b612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906143a2565b60405180910390fd5b6000612a266129bb565b90506000815111612a465760405180602001604052806000815250612a71565b80612a5084612c28565b604051602001612a61929190613f4c565b6040516020818303038152906040525b915050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612aec5750612aeb82612d89565b5b9050919050565b505050565b612b028383612df3565b612b0f6000848484612824565b612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590614142565b60405180910390fd5b505050565b612b5c81612fcd565b6000600860008381526020019081526020016000208054612b7c90614824565b905014612ba357600860008281526020019081526020016000206000612ba29190613170565b5b50565b60016000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000821415612c70576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d84565b600082905060005b60008214612ca2578080612c8b90614887565b915050600a82612c9b9190614680565b9150612c78565b60008167ffffffffffffffff811115612cbe57612cbd6149c7565b5b6040519080825280601f01601f191660200182016040528015612cf05781602001600182028036833780820191505090505b5090505b60008514612d7d57600182612d09919061470b565b9150600a85612d1891906148da565b6030612d24919061462a565b60f81b818381518110612d3a57612d39614998565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d769190614680565b9450612cf4565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614302565b60405180910390fd5b612e6c81611921565b15612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea3906141a2565b60405180910390fd5b612eb8600083836126fc565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f08919061462a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fc960008383612754565b5050565b6000612fd882611002565b9050612fe6816000846126fc565b612ff1600083611995565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613041919061470b565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130e681600084612754565b5050565b8280546130f690614824565b90600052602060002090601f016020900481019282613118576000855561315f565b82601f1061313157805160ff191683800117855561315f565b8280016001018555821561315f579182015b8281111561315e578251825591602001919060010190613143565b5b50905061316c91906131b0565b5090565b50805461317c90614824565b6000825580601f1061318e57506131ad565b601f0160209004906000526020600020908101906131ac91906131b0565b5b50565b5b808211156131c95760008160009055506001016131b1565b5090565b60006131e06131db84614522565b6144fd565b90508083825260208201905082856020860282011115613203576132026149fb565b5b60005b858110156132335781613219888261334f565b845260208401935060208301925050600181019050613206565b5050509392505050565b600061325061324b8461454e565b6144fd565b90508083825260208201905082856020860282011115613273576132726149fb565b5b60005b858110156132c157813567ffffffffffffffff811115613299576132986149f6565b5b8086016132a68982613442565b85526020850194506020840193505050600181019050613276565b5050509392505050565b60006132de6132d98461457a565b6144fd565b9050828152602081018484840111156132fa576132f9614a00565b5b6133058482856147e2565b509392505050565b600061332061331b846145ab565b6144fd565b90508281526020810184848401111561333c5761333b614a00565b5b6133478482856147e2565b509392505050565b60008135905061335e81615261565b92915050565b600082601f830112613379576133786149f6565b5b81356133898482602086016131cd565b91505092915050565b600082601f8301126133a7576133a66149f6565b5b81356133b784826020860161323d565b91505092915050565b6000813590506133cf81615278565b92915050565b6000813590506133e48161528f565b92915050565b6000813590506133f9816152a6565b92915050565b60008151905061340e816152a6565b92915050565b600082601f830112613429576134286149f6565b5b81356134398482602086016132cb565b91505092915050565b600082601f830112613457576134566149f6565b5b813561346784826020860161330d565b91505092915050565b60008135905061347f816152bd565b92915050565b600081359050613494816152d4565b92915050565b6000602082840312156134b0576134af614a0a565b5b60006134be8482850161334f565b91505092915050565b600080604083850312156134de576134dd614a0a565b5b60006134ec8582860161334f565b92505060206134fd8582860161334f565b9150509250929050565b6000806000606084860312156135205761351f614a0a565b5b600061352e8682870161334f565b935050602061353f8682870161334f565b925050604061355086828701613470565b9150509250925092565b6000806000806080858703121561357457613573614a0a565b5b60006135828782880161334f565b94505060206135938782880161334f565b93505060406135a487828801613470565b925050606085013567ffffffffffffffff8111156135c5576135c4614a05565b5b6135d187828801613414565b91505092959194509250565b600080604083850312156135f4576135f3614a0a565b5b60006136028582860161334f565b9250506020613613858286016133c0565b9150509250929050565b6000806040838503121561363457613633614a0a565b5b60006136428582860161334f565b925050602061365385828601613470565b9150509250929050565b6000806040838503121561367457613673614a0a565b5b60006136828582860161334f565b925050602061369385828601613485565b9150509250929050565b600080600080608085870312156136b7576136b6614a0a565b5b600085013567ffffffffffffffff8111156136d5576136d4614a05565b5b6136e187828801613392565b945050602085013567ffffffffffffffff81111561370257613701614a05565b5b61370e87828801613364565b935050604085013567ffffffffffffffff81111561372f5761372e614a05565b5b61373b87828801613392565b925050606061374c87828801613470565b91505092959194509250565b6000806040838503121561376f5761376e614a0a565b5b600061377d858286016133d5565b925050602083013567ffffffffffffffff81111561379e5761379d614a05565b5b6137aa85828601613414565b9150509250929050565b6000602082840312156137ca576137c9614a0a565b5b60006137d8848285016133ea565b91505092915050565b6000602082840312156137f7576137f6614a0a565b5b6000613805848285016133ff565b91505092915050565b60008060006060848603121561382757613826614a0a565b5b600084013567ffffffffffffffff81111561384557613844614a05565b5b61385186828701613442565b93505060206138628682870161334f565b925050604084013567ffffffffffffffff81111561388357613882614a05565b5b61388f86828701613442565b9150509250925092565b6000806000606084860312156138b2576138b1614a0a565b5b600084013567ffffffffffffffff8111156138d0576138cf614a05565b5b6138dc86828701613442565b935050602084013567ffffffffffffffff8111156138fd576138fc614a05565b5b61390986828701613414565b925050604084013567ffffffffffffffff81111561392a57613929614a05565b5b61393686828701613442565b9150509250925092565b60006020828403121561395657613955614a0a565b5b600061396484828501613470565b91505092915050565b6000806040838503121561398457613983614a0a565b5b600061399285828601613470565b92505060206139a385828601613470565b9150509250929050565b6139b68161473f565b82525050565b6139c581614751565b82525050565b6139d48161475d565b82525050565b6139eb6139e68261475d565b6148d0565b82525050565b60006139fc826145dc565b613a0681856145f2565b9350613a168185602086016147f1565b613a1f81614a0f565b840191505092915050565b6000613a35826145e7565b613a3f818561460e565b9350613a4f8185602086016147f1565b613a5881614a0f565b840191505092915050565b6000613a6e826145e7565b613a78818561461f565b9350613a888185602086016147f1565b80840191505092915050565b6000613aa160238361460e565b9150613aac82614a20565b604082019050919050565b6000613ac460148361460e565b9150613acf82614a6f565b602082019050919050565b6000613ae7601c8361461f565b9150613af282614a98565b601c82019050919050565b6000613b0a60328361460e565b9150613b1582614ac1565b604082019050919050565b6000613b2d60268361460e565b9150613b3882614b10565b604082019050919050565b6000613b5060258361460e565b9150613b5b82614b5f565b604082019050919050565b6000613b73601c8361460e565b9150613b7e82614bae565b602082019050919050565b6000613b9660248361460e565b9150613ba182614bd7565b604082019050919050565b6000613bb960198361460e565b9150613bc482614c26565b602082019050919050565b6000613bdc602c8361460e565b9150613be782614c4f565b604082019050919050565b6000613bff60288361460e565b9150613c0a82614c9e565b604082019050919050565b6000613c2260108361460e565b9150613c2d82614ced565b602082019050919050565b6000613c45602a8361460e565b9150613c5082614d16565b604082019050919050565b6000613c6860388361460e565b9150613c7382614d65565b604082019050919050565b6000613c8b602a8361460e565b9150613c9682614db4565b604082019050919050565b6000613cae60298361460e565b9150613cb982614e03565b604082019050919050565b6000613cd1602e8361460e565b9150613cdc82614e52565b604082019050919050565b6000613cf460208361460e565b9150613cff82614ea1565b602082019050919050565b6000613d1760318361460e565b9150613d2282614eca565b604082019050919050565b6000613d3a602c8361460e565b9150613d4582614f19565b604082019050919050565b6000613d5d60208361460e565b9150613d6882614f68565b602082019050919050565b6000613d8060138361460e565b9150613d8b82614f91565b602082019050919050565b6000613da3602f8361460e565b9150613dae82614fba565b604082019050919050565b6000613dc660218361460e565b9150613dd182615009565b604082019050919050565b6000613de9600083614603565b9150613df482615058565b600082019050919050565b6000613e0c60228361460e565b9150613e178261505b565b604082019050919050565b6000613e2f60318361460e565b9150613e3a826150aa565b604082019050919050565b6000613e52602a8361460e565b9150613e5d826150f9565b604082019050919050565b6000613e7560188361460e565b9150613e8082615148565b602082019050919050565b6000613e9860228361460e565b9150613ea382615171565b604082019050919050565b6000613ebb60308361460e565b9150613ec6826151c0565b604082019050919050565b6000613ede60148361460e565b9150613ee98261520f565b602082019050919050565b6000613f0160198361460e565b9150613f0c82615238565b602082019050919050565b613f20816147b3565b82525050565b613f2f816147bd565b82525050565b6000613f418284613a63565b915081905092915050565b6000613f588285613a63565b9150613f648284613a63565b91508190509392505050565b6000613f7b82613ada565b9150613f8782846139da565b60208201915081905092915050565b6000613fa182613ddc565b9150819050919050565b6000602082019050613fc060008301846139ad565b92915050565b6000608082019050613fdb60008301876139ad565b613fe860208301866139ad565b613ff56040830185613f17565b818103606083015261400781846139f1565b905095945050505050565b600060408201905061402760008301856139ad565b6140346020830184613f17565b9392505050565b600060208201905061405060008301846139bc565b92915050565b600060808201905061406b60008301876139cb565b6140786020830186613f26565b61408560408301856139cb565b61409260608301846139cb565b95945050505050565b600060208201905081810360008301526140b58184613a2a565b905092915050565b600060608201905081810360008301526140d78186613a2a565b90506140e660208301856139ad565b81810360408301526140f88184613a2a565b9050949350505050565b6000602082019050818103600083015261411b81613a94565b9050919050565b6000602082019050818103600083015261413b81613ab7565b9050919050565b6000602082019050818103600083015261415b81613afd565b9050919050565b6000602082019050818103600083015261417b81613b20565b9050919050565b6000602082019050818103600083015261419b81613b43565b9050919050565b600060208201905081810360008301526141bb81613b66565b9050919050565b600060208201905081810360008301526141db81613b89565b9050919050565b600060208201905081810360008301526141fb81613bac565b9050919050565b6000602082019050818103600083015261421b81613bcf565b9050919050565b6000602082019050818103600083015261423b81613bf2565b9050919050565b6000602082019050818103600083015261425b81613c15565b9050919050565b6000602082019050818103600083015261427b81613c38565b9050919050565b6000602082019050818103600083015261429b81613c5b565b9050919050565b600060208201905081810360008301526142bb81613c7e565b9050919050565b600060208201905081810360008301526142db81613ca1565b9050919050565b600060208201905081810360008301526142fb81613cc4565b9050919050565b6000602082019050818103600083015261431b81613ce7565b9050919050565b6000602082019050818103600083015261433b81613d0a565b9050919050565b6000602082019050818103600083015261435b81613d2d565b9050919050565b6000602082019050818103600083015261437b81613d50565b9050919050565b6000602082019050818103600083015261439b81613d73565b9050919050565b600060208201905081810360008301526143bb81613d96565b9050919050565b600060208201905081810360008301526143db81613db9565b9050919050565b600060208201905081810360008301526143fb81613dff565b9050919050565b6000602082019050818103600083015261441b81613e22565b9050919050565b6000602082019050818103600083015261443b81613e45565b9050919050565b6000602082019050818103600083015261445b81613e68565b9050919050565b6000602082019050818103600083015261447b81613e8b565b9050919050565b6000602082019050818103600083015261449b81613eae565b9050919050565b600060208201905081810360008301526144bb81613ed1565b9050919050565b600060208201905081810360008301526144db81613ef4565b9050919050565b60006020820190506144f76000830184613f17565b92915050565b6000614507614518565b90506145138282614856565b919050565b6000604051905090565b600067ffffffffffffffff82111561453d5761453c6149c7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614569576145686149c7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614595576145946149c7565b5b61459e82614a0f565b9050602081019050919050565b600067ffffffffffffffff8211156145c6576145c56149c7565b5b6145cf82614a0f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614635826147b3565b9150614640836147b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146755761467461490b565b5b828201905092915050565b600061468b826147b3565b9150614696836147b3565b9250826146a6576146a561493a565b5b828204905092915050565b60006146bc826147b3565b91506146c7836147b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614700576146ff61490b565b5b828202905092915050565b6000614716826147b3565b9150614721836147b3565b9250828210156147345761473361490b565b5b828203905092915050565b600061474a82614793565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561480f5780820151818401526020810190506147f4565b8381111561481e576000848401525b50505050565b6000600282049050600182168061483c57607f821691505b602082108114156148505761484f614969565b5b50919050565b61485f82614a0f565b810181811067ffffffffffffffff8211171561487e5761487d6149c7565b5b80604052505050565b6000614892826147b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148c5576148c461490b565b5b600182019050919050565b6000819050919050565b60006148e5826147b3565b91506148f0836147b3565b925082614900576148ff61493a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7461736b494473206d75737420626520657175616c20746f2062617463685f7360008201527f697a650000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e70757420617272617973206d75737420626520657175616c20746f20626160008201527f7463685f73697a65000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a207461736b494420717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420656e6f756768206574682073656e7400000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f742075736520656d70747920737472696e6720666f72207461736b60008201527f4944000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b7f5468697320647265616d2068617320616c7265616479206265656e206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f7369676e617475726520697320696e76616c6964000000000000000000000000600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b61526a8161473f565b811461527557600080fd5b50565b61528181614751565b811461528c57600080fd5b50565b6152988161475d565b81146152a357600080fd5b50565b6152af81614767565b81146152ba57600080fd5b50565b6152c6816147b3565b81146152d157600080fd5b50565b6152dd816147ca565b81146152e857600080fd5b5056fea264697066735822122059466b4f0b90f6df67833eede15768911332b143ec3a449968caeafd05fa9a5864736f6c63430008070033000000000000000000000000f5723a225cd6d4e087efd6f7e030b1d8c83a9b59