60c0604052600080556000600755662386f26fc10000600b55600a600c55605a600d556101f4600e55611388600f5560026010553480156200004057600080fd5b506040518060400160405280601181526020017f457468204170657320427573696e6573730000000000000000000000000000008152506040518060400160405280600381526020017f4541420000000000000000000000000000000000000000000000000000000000815250600a61138860008111620000f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ef90620003a0565b60405180910390fd5b600082116200013e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000135906200037e565b60405180910390fd5b83600190805190602001906200015692919062000280565b5082600290805190602001906200016f92919062000280565b508160a08181525050806080818152505050505050620001a462000198620001b260201b60201c565b620001ba60201b60201c565b6001600981905550620004d6565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028e90620003d3565b90600052602060002090601f016020900481019282620002b25760008555620002fe565b82601f10620002cd57805160ff1916838001178555620002fe565b82800160010185558215620002fe579182015b82811115620002fd578251825591602001919060010190620002e0565b5b5090506200030d919062000311565b5090565b5b808211156200032c57600081600090555060010162000312565b5090565b60006200033f602783620003c2565b91506200034c8262000438565b604082019050919050565b600062000366602e83620003c2565b9150620003738262000487565b604082019050919050565b60006020820190508181036000830152620003998162000330565b9050919050565b60006020820190508181036000830152620003bb8162000357565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003ec57607f821691505b6020821081141562000403576200040262000409565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516155656200051160003960008181612c3a01528181612c63015261340d0152600081816129c201526129f601526155656000f3fe6080604052600436106102675760003560e01c80637294e1ef11610144578063b88d4fde116100b6578063d7224ba01161007a578063d7224ba014610909578063dc33e68114610934578063e268e4d314610971578063e985e9c51461099a578063f2fde38b146109d7578063f968adbe14610a0057610267565b8063b88d4fde14610824578063c6f6f2161461084d578063c87b56dd14610876578063d1239730146108b3578063d5abeb01146108de57610267565b806391b7f5ed1161010857806391b7f5ed146107235780639231ab2a1461074c57806395d89b4114610789578063a035b1fe146107b4578063a0712d68146107df578063a22cb465146107fb57610267565b80637294e1ef146106525780637d55094d1461068f5780638ba4cc3c146106a65780638da5cb5b146106cf5780638db89f07146106fa57610267565b806342842e0e116101dd5780635b70ea9f116101a15780635b70ea9f146105425780636352211e1461056d5780636c0360eb146105aa57806370a08231146105d557806370e0936914610612578063715018a61461063b57610267565b806342842e0e1461045f578063453c2310146104885780634f6ccce7146104b357806355f804b3146104f0578063563aaf111461051957610267565b8063228025e81161022f578063228025e81461036557806323b872dd1461038e5780632d20fb60146103b75780632f745c59146103e0578063333e44e61461041d5780633ccfd60b1461044857610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806318160ddd1461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613c1d565b610a2b565b6040516102a09190614331565b60405180910390f35b3480156102b557600080fd5b506102be610b75565b6040516102cb919061434c565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613cc4565b610c07565b60405161030891906142ca565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613bdd565b610c8c565b005b34801561034657600080fd5b5061034f610da5565b60405161035c9190614789565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613cc4565b610dae565b005b34801561039a57600080fd5b506103b560048036038101906103b09190613ac7565b610e34565b005b3480156103c357600080fd5b506103de60048036038101906103d99190613cc4565b610e44565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613bdd565b610f22565b6040516104149190614789565b60405180910390f35b34801561042957600080fd5b50610432611120565b60405161043f9190614789565b60405180910390f35b34801561045457600080fd5b5061045d611126565b005b34801561046b57600080fd5b5061048660048036038101906104819190613ac7565b6112a7565b005b34801561049457600080fd5b5061049d6112c7565b6040516104aa9190614789565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613cc4565b6112cd565b6040516104e79190614789565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613c77565b611320565b005b34801561052557600080fd5b50610540600480360381019061053b9190613cc4565b6113b2565b005b34801561054e57600080fd5b50610557611438565b6040516105649190614789565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190613cc4565b61143e565b6040516105a191906142ca565b60405180910390f35b3480156105b657600080fd5b506105bf611454565b6040516105cc919061434c565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613a5a565b6114e2565b6040516106099190614789565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613cc4565b6115cb565b005b34801561064757600080fd5b50610650611651565b005b34801561065e57600080fd5b5061067960048036038101906106749190613a5a565b6116d9565b6040516106869190614789565b60405180910390f35b34801561069b57600080fd5b506106a46116f1565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613bdd565b611799565b005b3480156106db57600080fd5b506106e4611823565b6040516106f191906142ca565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613cc4565b61184d565b005b34801561072f57600080fd5b5061074a60048036038101906107459190613cc4565b61192d565b005b34801561075857600080fd5b50610773600480360381019061076e9190613cc4565b6119b3565b604051610780919061476e565b60405180910390f35b34801561079557600080fd5b5061079e6119cb565b6040516107ab919061434c565b60405180910390f35b3480156107c057600080fd5b506107c9611a5d565b6040516107d69190614789565b60405180910390f35b6107f960048036038101906107f49190613cc4565b611a63565b005b34801561080757600080fd5b50610822600480360381019061081d9190613b9d565b611d1b565b005b34801561083057600080fd5b5061084b60048036038101906108469190613b1a565b611e9c565b005b34801561085957600080fd5b50610874600480360381019061086f9190613cc4565b611ef8565b005b34801561088257600080fd5b5061089d60048036038101906108989190613cc4565b611f7e565b6040516108aa919061434c565b60405180910390f35b3480156108bf57600080fd5b506108c8612025565b6040516108d59190614331565b60405180910390f35b3480156108ea57600080fd5b506108f3612038565b6040516109009190614789565b60405180910390f35b34801561091557600080fd5b5061091e61203e565b60405161092b9190614789565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190613a5a565b612044565b6040516109689190614789565b60405180910390f35b34801561097d57600080fd5b5061099860048036038101906109939190613cc4565b612056565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190613a87565b6120dc565b6040516109ce9190614331565b60405180910390f35b3480156109e357600080fd5b506109fe60048036038101906109f99190613a5a565b612170565b005b348015610a0c57600080fd5b50610a15612268565b604051610a229190614789565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6e5750610b6d8261226e565b5b9050919050565b606060018054610b8490614ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb090614ae7565b8015610bfd5780601f10610bd257610100808354040283529160200191610bfd565b820191906000526020600020905b815481529060010190602001808311610be057829003601f168201915b5050505050905090565b6000610c12826122d8565b610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c489061472e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c978261143e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff906145ee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d276122e5565b73ffffffffffffffffffffffffffffffffffffffff161480610d565750610d5581610d506122e5565b6120dc565b5b610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906144ee565b60405180910390fd5b610da08383836122ed565b505050565b60008054905090565b610db66122e5565b73ffffffffffffffffffffffffffffffffffffffff16610dd4611823565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e219061456e565b60405180910390fd5b80600f8190555050565b610e3f83838361239f565b505050565b610e4c6122e5565b73ffffffffffffffffffffffffffffffffffffffff16610e6a611823565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb79061456e565b60405180910390fd5b60026009541415610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906146ee565b60405180910390fd5b6002600981905550610f1781612958565b600160098190555050565b6000610f2d836114e2565b8210610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f659061436e565b60405180910390fd5b6000610f78610da5565b905060008060005b838110156110de576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461107257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ca57868414156110bb57819550505050505061111a565b83806110c690614b4a565b9450505b5080806110d690614b4a565b915050610f80565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611111906146ae565b60405180910390fd5b92915050565b600e5481565b61112e6122e5565b73ffffffffffffffffffffffffffffffffffffffff1661114c611823565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111999061456e565b60405180910390fd5b600260095414156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906146ee565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611216906142b5565b60006040518083038185875af1925050503d8060008114611253576040519150601f19603f3d011682016040523d82523d6000602084013e611258565b606091505b505090508061129c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112939061460e565b60405180910390fd5b506001600981905550565b6112c283838360405180602001604052806000815250611e9c565b505050565b600d5481565b60006112d7610da5565b8210611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f9061442e565b60405180910390fd5b819050919050565b6113286122e5565b73ffffffffffffffffffffffffffffffffffffffff16611346611823565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113939061456e565b60405180910390fd5b8181600a91906113ad92919061384e565b505050565b6113ba6122e5565b73ffffffffffffffffffffffffffffffffffffffff166113d8611823565b73ffffffffffffffffffffffffffffffffffffffff161461142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114259061456e565b60405180910390fd5b80600e8190555050565b60105481565b600061144982612be6565b600001519050919050565b600a805461146190614ae7565b80601f016020809104026020016040519081016040528092919081815260200182805461148d90614ae7565b80156114da5780601f106114af576101008083540402835291602001916114da565b820191906000526020600020905b8154815290600101906020018083116114bd57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a9061452e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115d36122e5565b73ffffffffffffffffffffffffffffffffffffffff166115f1611823565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e9061456e565b60405180910390fd5b8060108190555050565b6116596122e5565b73ffffffffffffffffffffffffffffffffffffffff16611677611823565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c49061456e565b60405180910390fd5b6116d76000612de9565b565b60126020528060005260406000206000915090505481565b6116f96122e5565b73ffffffffffffffffffffffffffffffffffffffff16611717611823565b73ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117649061456e565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6117a16122e5565b73ffffffffffffffffffffffffffffffffffffffff166117bf611823565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c9061456e565b60405180910390fd5b61181f8282612eaf565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118556122e5565b73ffffffffffffffffffffffffffffffffffffffff16611873611823565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c09061456e565b60405180910390fd5b600f54816118d5610da5565b6118df919061488e565b1115611920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611917906144ae565b60405180910390fd5b61192a3382612eaf565b50565b6119356122e5565b73ffffffffffffffffffffffffffffffffffffffff16611953611823565b73ffffffffffffffffffffffffffffffffffffffff16146119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09061456e565b60405180910390fd5b80600b8190555050565b6119bb6138d4565b6119c482612be6565b9050919050565b6060600280546119da90614ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0690614ae7565b8015611a535780601f10611a2857610100808354040283529160200191611a53565b820191906000526020600020905b815481529060010190602001808311611a3657829003601f168201915b5050505050905090565b600b5481565b6000600b549050600034148015611a8e5750600e5482611a81610da5565b611a8b919061488e565b11155b15611b7d5760105482601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ae1919061488e565b1115611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b199061468e565b60405180910390fd5b6000905081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b75919061488e565b925050819055505b8082611b899190614915565b3414611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc19061440e565b60405180910390fd5b600f5482611bd6610da5565b611be0919061488e565b1115611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c18906144ce565b60405180910390fd5b601160009054906101000a900460ff16611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906143ee565b60405180910390fd5b600d5482611c7d33612044565b611c87919061488e565b1115611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf9061448e565b60405180910390fd5b600c54821115611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d049061438e565b60405180910390fd5b611d173383612eaf565b5050565b611d236122e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906145ae565b60405180910390fd5b8060066000611d9e6122e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e4b6122e5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e909190614331565b60405180910390a35050565b611ea784848461239f565b611eb384848484612ecd565b611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee99061462e565b60405180910390fd5b50505050565b611f006122e5565b73ffffffffffffffffffffffffffffffffffffffff16611f1e611823565b73ffffffffffffffffffffffffffffffffffffffff1614611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b9061456e565b60405180910390fd5b80600c8190555050565b6060611f89826122d8565b611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061458e565b60405180910390fd5b6000611fd2613064565b90506000815111611ff2576040518060200160405280600081525061201d565b80611ffc846130f6565b60405160200161200d929190614291565b6040516020818303038152906040525b915050919050565b601160009054906101000a900460ff1681565b600f5481565b60075481565b600061204f82613257565b9050919050565b61205e6122e5565b73ffffffffffffffffffffffffffffffffffffffff1661207c611823565b73ffffffffffffffffffffffffffffffffffffffff16146120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c99061456e565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121786122e5565b73ffffffffffffffffffffffffffffffffffffffff16612196611823565b73ffffffffffffffffffffffffffffffffffffffff16146121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39061456e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561225c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612253906143ae565b60405180910390fd5b61226581612de9565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006123aa82612be6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123d16122e5565b73ffffffffffffffffffffffffffffffffffffffff16148061242d57506123f66122e5565b73ffffffffffffffffffffffffffffffffffffffff1661241584610c07565b73ffffffffffffffffffffffffffffffffffffffff16145b80612449575061244882600001516124436122e5565b6120dc565b5b90508061248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906145ce565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f49061454e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561256d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125649061444e565b60405180910390fd5b61257a8585856001613340565b61258a60008484600001516122ed565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125f8919061496f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661269c9190614848565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846127a2919061488e565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128e857612818816122d8565b156128e7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129508686866001613346565b505050505050565b60006007549050600082116129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129999061450e565b60405180910390fd5b6000600183836129b2919061488e565b6129bc91906149a3565b905060017f00000000000000000000000000000000000000000000000000000000000000006129eb91906149a3565b811115612a225760017f0000000000000000000000000000000000000000000000000000000000000000612a1f91906149a3565b90505b612a2b816122d8565b612a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a61906146ce565b60405180910390fd5b60008290505b818111612bcd57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bba576000612aed82612be6565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612bc590614b4a565b915050612a70565b50600181612bdb919061488e565b600781905550505050565b612bee6138d4565b612bf7826122d8565b612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d906143ce565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612c9a5760017f000000000000000000000000000000000000000000000000000000000000000084612c8d91906149a3565b612c97919061488e565b90505b60008390505b818110612da8576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d9457809350505050612de4565b508080612da090614abd565b915050612ca0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddb9061470e565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ec982826040518060200160405280600081525061334c565b5050565b6000612eee8473ffffffffffffffffffffffffffffffffffffffff1661382b565b15613057578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f176122e5565b8786866040518563ffffffff1660e01b8152600401612f3994939291906142e5565b602060405180830381600087803b158015612f5357600080fd5b505af1925050508015612f8457506040513d601f19601f82011682018060405250810190612f819190613c4a565b60015b613007573d8060008114612fb4576040519150601f19603f3d011682016040523d82523d6000602084013e612fb9565b606091505b50600081511415612fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff69061462e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061305c565b600190505b949350505050565b6060600a805461307390614ae7565b80601f016020809104026020016040519081016040528092919081815260200182805461309f90614ae7565b80156130ec5780601f106130c1576101008083540402835291602001916130ec565b820191906000526020600020905b8154815290600101906020018083116130cf57829003601f168201915b5050505050905090565b6060600082141561313e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613252565b600082905060005b6000821461317057808061315990614b4a565b915050600a8261316991906148e4565b9150613146565b60008167ffffffffffffffff81111561318c5761318b614c80565b5b6040519080825280601f01601f1916602001820160405280156131be5781602001600182028036833780820191505090505b5090505b6000851461324b576001826131d791906149a3565b9150600a856131e69190614b93565b60306131f2919061488e565b60f81b81838151811061320857613207614c51565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561324491906148e4565b94506131c2565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bf9061446e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b99061466e565b60405180910390fd5b6133cb816122d8565b1561340b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134029061464e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561346e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134659061474e565b60405180910390fd5b61347b6000858386613340565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516135789190614848565b6fffffffffffffffffffffffffffffffff16815260200185836020015161359f9190614848565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561380e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137ae6000888488612ecd565b6137ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e49061462e565b60405180910390fd5b81806137f890614b4a565b925050808061380690614b4a565b91505061373d565b50806000819055506138236000878588613346565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461385a90614ae7565b90600052602060002090601f01602090048101928261387c57600085556138c3565b82601f1061389557803560ff19168380011785556138c3565b828001600101855582156138c3579182015b828111156138c25782358255916020019190600101906138a7565b5b5090506138d0919061390e565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561392757600081600090555060010161390f565b5090565b600061393e613939846147c9565b6147a4565b90508281526020810184848401111561395a57613959614cbe565b5b613965848285614a7b565b509392505050565b60008135905061397c816154d3565b92915050565b600081359050613991816154ea565b92915050565b6000813590506139a681615501565b92915050565b6000815190506139bb81615501565b92915050565b600082601f8301126139d6576139d5614cb4565b5b81356139e684826020860161392b565b91505092915050565b60008083601f840112613a0557613a04614cb4565b5b8235905067ffffffffffffffff811115613a2257613a21614caf565b5b602083019150836001820283011115613a3e57613a3d614cb9565b5b9250929050565b600081359050613a5481615518565b92915050565b600060208284031215613a7057613a6f614cc8565b5b6000613a7e8482850161396d565b91505092915050565b60008060408385031215613a9e57613a9d614cc8565b5b6000613aac8582860161396d565b9250506020613abd8582860161396d565b9150509250929050565b600080600060608486031215613ae057613adf614cc8565b5b6000613aee8682870161396d565b9350506020613aff8682870161396d565b9250506040613b1086828701613a45565b9150509250925092565b60008060008060808587031215613b3457613b33614cc8565b5b6000613b428782880161396d565b9450506020613b538782880161396d565b9350506040613b6487828801613a45565b925050606085013567ffffffffffffffff811115613b8557613b84614cc3565b5b613b91878288016139c1565b91505092959194509250565b60008060408385031215613bb457613bb3614cc8565b5b6000613bc28582860161396d565b9250506020613bd385828601613982565b9150509250929050565b60008060408385031215613bf457613bf3614cc8565b5b6000613c028582860161396d565b9250506020613c1385828601613a45565b9150509250929050565b600060208284031215613c3357613c32614cc8565b5b6000613c4184828501613997565b91505092915050565b600060208284031215613c6057613c5f614cc8565b5b6000613c6e848285016139ac565b91505092915050565b60008060208385031215613c8e57613c8d614cc8565b5b600083013567ffffffffffffffff811115613cac57613cab614cc3565b5b613cb8858286016139ef565b92509250509250929050565b600060208284031215613cda57613cd9614cc8565b5b6000613ce884828501613a45565b91505092915050565b613cfa816149d7565b82525050565b613d09816149d7565b82525050565b613d18816149e9565b82525050565b6000613d29826147fa565b613d338185614810565b9350613d43818560208601614a8a565b613d4c81614ccd565b840191505092915050565b6000613d6282614805565b613d6c818561482c565b9350613d7c818560208601614a8a565b613d8581614ccd565b840191505092915050565b6000613d9b82614805565b613da5818561483d565b9350613db5818560208601614a8a565b80840191505092915050565b6000613dce60228361482c565b9150613dd982614cde565b604082019050919050565b6000613df160158361482c565b9150613dfc82614d2d565b602082019050919050565b6000613e1460268361482c565b9150613e1f82614d56565b604082019050919050565b6000613e37602a8361482c565b9150613e4282614da5565b604082019050919050565b6000613e5a600d8361482c565b9150613e6582614df4565b602082019050919050565b6000613e7d60128361482c565b9150613e8882614e1d565b602082019050919050565b6000613ea060238361482c565b9150613eab82614e46565b604082019050919050565b6000613ec360258361482c565b9150613ece82614e95565b604082019050919050565b6000613ee660318361482c565b9150613ef182614ee4565b604082019050919050565b6000613f09600e8361482c565b9150613f1482614f33565b602082019050919050565b6000613f2c60098361482c565b9150613f3782614f5c565b602082019050919050565b6000613f4f60078361482c565b9150613f5a82614f85565b602082019050919050565b6000613f7260398361482c565b9150613f7d82614fae565b604082019050919050565b6000613f9560188361482c565b9150613fa082614ffd565b602082019050919050565b6000613fb8602b8361482c565b9150613fc382615026565b604082019050919050565b6000613fdb60268361482c565b9150613fe682615075565b604082019050919050565b6000613ffe60208361482c565b9150614009826150c4565b602082019050919050565b6000614021602f8361482c565b915061402c826150ed565b604082019050919050565b6000614044601a8361482c565b915061404f8261513c565b602082019050919050565b600061406760328361482c565b915061407282615165565b604082019050919050565b600061408a60228361482c565b9150614095826151b4565b604082019050919050565b60006140ad600083614821565b91506140b882615203565b600082019050919050565b60006140d060108361482c565b91506140db82615206565b602082019050919050565b60006140f360338361482c565b91506140fe8261522f565b604082019050919050565b6000614116601d8361482c565b91506141218261527e565b602082019050919050565b600061413960218361482c565b9150614144826152a7565b604082019050919050565b600061415c60058361482c565b9150614167826152f6565b602082019050919050565b600061417f602e8361482c565b915061418a8261531f565b604082019050919050565b60006141a260268361482c565b91506141ad8261536e565b604082019050919050565b60006141c5601f8361482c565b91506141d0826153bd565b602082019050919050565b60006141e8602f8361482c565b91506141f3826153e6565b604082019050919050565b600061420b602d8361482c565b915061421682615435565b604082019050919050565b600061422e60228361482c565b915061423982615484565b604082019050919050565b60408201600082015161425a6000850182613cf1565b50602082015161426d6020850182614282565b50505050565b61427c81614a5d565b82525050565b61428b81614a67565b82525050565b600061429d8285613d90565b91506142a98284613d90565b91508190509392505050565b60006142c0826140a0565b9150819050919050565b60006020820190506142df6000830184613d00565b92915050565b60006080820190506142fa6000830187613d00565b6143076020830186613d00565b6143146040830185614273565b81810360608301526143268184613d1e565b905095945050505050565b60006020820190506143466000830184613d0f565b92915050565b600060208201905081810360008301526143668184613d57565b905092915050565b6000602082019050818103600083015261438781613dc1565b9050919050565b600060208201905081810360008301526143a781613de4565b9050919050565b600060208201905081810360008301526143c781613e07565b9050919050565b600060208201905081810360008301526143e781613e2a565b9050919050565b6000602082019050818103600083015261440781613e4d565b9050919050565b6000602082019050818103600083015261442781613e70565b9050919050565b6000602082019050818103600083015261444781613e93565b9050919050565b6000602082019050818103600083015261446781613eb6565b9050919050565b6000602082019050818103600083015261448781613ed9565b9050919050565b600060208201905081810360008301526144a781613efc565b9050919050565b600060208201905081810360008301526144c781613f1f565b9050919050565b600060208201905081810360008301526144e781613f42565b9050919050565b6000602082019050818103600083015261450781613f65565b9050919050565b6000602082019050818103600083015261452781613f88565b9050919050565b6000602082019050818103600083015261454781613fab565b9050919050565b6000602082019050818103600083015261456781613fce565b9050919050565b6000602082019050818103600083015261458781613ff1565b9050919050565b600060208201905081810360008301526145a781614014565b9050919050565b600060208201905081810360008301526145c781614037565b9050919050565b600060208201905081810360008301526145e78161405a565b9050919050565b600060208201905081810360008301526146078161407d565b9050919050565b60006020820190508181036000830152614627816140c3565b9050919050565b60006020820190508181036000830152614647816140e6565b9050919050565b6000602082019050818103600083015261466781614109565b9050919050565b600060208201905081810360008301526146878161412c565b9050919050565b600060208201905081810360008301526146a78161414f565b9050919050565b600060208201905081810360008301526146c781614172565b9050919050565b600060208201905081810360008301526146e781614195565b9050919050565b60006020820190508181036000830152614707816141b8565b9050919050565b60006020820190508181036000830152614727816141db565b9050919050565b60006020820190508181036000830152614747816141fe565b9050919050565b6000602082019050818103600083015261476781614221565b9050919050565b60006040820190506147836000830184614244565b92915050565b600060208201905061479e6000830184614273565b92915050565b60006147ae6147bf565b90506147ba8282614b19565b919050565b6000604051905090565b600067ffffffffffffffff8211156147e4576147e3614c80565b5b6147ed82614ccd565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061485382614a21565b915061485e83614a21565b9250826fffffffffffffffffffffffffffffffff0382111561488357614882614bc4565b5b828201905092915050565b600061489982614a5d565b91506148a483614a5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148d9576148d8614bc4565b5b828201905092915050565b60006148ef82614a5d565b91506148fa83614a5d565b92508261490a57614909614bf3565b5b828204905092915050565b600061492082614a5d565b915061492b83614a5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496457614963614bc4565b5b828202905092915050565b600061497a82614a21565b915061498583614a21565b92508282101561499857614997614bc4565b5b828203905092915050565b60006149ae82614a5d565b91506149b983614a5d565b9250828210156149cc576149cb614bc4565b5b828203905092915050565b60006149e282614a3d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614aa8578082015181840152602081019050614a8d565b83811115614ab7576000848401525b50505050565b6000614ac882614a5d565b91506000821415614adc57614adb614bc4565b5b600182039050919050565b60006002820490506001821680614aff57607f821691505b60208210811415614b1357614b12614c22565b5b50919050565b614b2282614ccd565b810181811067ffffffffffffffff82111715614b4157614b40614c80565b5b80604052505050565b6000614b5582614a5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b8857614b87614bc4565b5b600182019050919050565b6000614b9e82614a5d565b9150614ba983614a5d565b925082614bb957614bb8614bf3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d697420506572205472616e73616374696f6e0000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720506175736500000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f4d6178205065722057616c6c6574000000000000000000000000000000000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f536f6c646f757400000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6154dc816149d7565b81146154e757600080fd5b50565b6154f3816149e9565b81146154fe57600080fd5b50565b61550a816149f5565b811461551557600080fd5b50565b61552181614a5d565b811461552c57600080fd5b5056fea2646970667358221220db24b9c8dcce7fbb0a9217dd7a370374e9fbf43cc9810710f7c6c5424608021664736f6c63430008070033