60806040523480156200001157600080fd5b50604051620056e7380380620056e78339818101604052810190620000379190620005cd565b838282818181600090805190602001906200005492919062000494565b5080600190805190602001906200006d92919062000494565b50505062000090620000846200019660201b60201c565b6200019e60201b60201c565b620000c7837fc35b3779000000000000000000000000000000000000000000000000000000006200026460201b620018b81760201c565b620000fe576040517f16fab9ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001707f11865f78000000000000000000000000000000000000000000000000000000006200029a60201b60201c565b50505082601090805190602001906200018b92919062000494565b50505050506200091f565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000277836200037360201b60201c565b8015620002925750620002918383620003d160201b60201c565b5b905092915050565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000306576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fd90620006d9565b60405180910390fd5b6001600a6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000620003a7827f01ffc9a700000000000000000000000000000000000000000000000000000000620003d160201b60201c565b8015620003ca5750620003c88263ffffffff60e01b620003d160201b60201c565b155b9050919050565b6000806301ffc9a760e01b83604051602401620003ef9190620006bc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156200047b575060208210155b8015620004885750600081115b94505050505092915050565b828054620004a29062000801565b90600052602060002090601f016020900481019282620004c6576000855562000512565b82601f10620004e157805160ff191683800117855562000512565b8280016001018555821562000512579182015b8281111562000511578251825591602001919060010190620004f4565b5b50905062000521919062000525565b5090565b5b808211156200054057600081600090555060010162000526565b5090565b60006200055b620005558462000724565b620006fb565b9050828152602081018484840111156200057457600080fd5b62000581848285620007cb565b509392505050565b6000815190506200059a8162000905565b92915050565b600082601f830112620005b257600080fd5b8151620005c484826020860162000544565b91505092915050565b60008060008060808587031215620005e457600080fd5b6000620005f48782880162000589565b945050602085015167ffffffffffffffff8111156200061257600080fd5b6200062087828801620005a0565b935050604085015167ffffffffffffffff8111156200063e57600080fd5b6200064c87828801620005a0565b925050606085015167ffffffffffffffff8111156200066a57600080fd5b6200067887828801620005a0565b91505092959194509250565b6200068f816200077f565b82525050565b6000620006a4601c836200075a565b9150620006b182620008dc565b602082019050919050565b6000602082019050620006d3600083018462000684565b92915050565b60006020820190508181036000830152620006f48162000695565b9050919050565b6000620007076200071a565b905062000715828262000837565b919050565b6000604051905090565b600067ffffffffffffffff8211156200074257620007416200089c565b5b6200074d82620008cb565b9050602081019050919050565b600082825260208201905092915050565b60006200077882620007ab565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620007eb578082015181840152602081019050620007ce565b83811115620007fb576000848401525b50505050565b600060028204905060018216806200081a57607f821691505b602082108114156200083157620008306200086d565b5b50919050565b6200084282620008cb565b810181811067ffffffffffffffff821117156200086457620008636200089c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b62000910816200076b565b81146200091c57600080fd5b50565b614db8806200092f6000396000f3fe6080604052600436106101e35760003560e01c80635ef1e8fd1161010257806395d89b4111610095578063b88d4fde11610064578063b88d4fde14610734578063c87b56dd1461075d578063e985e9c51461079a578063f2fde38b146107d7576101e3565b806395d89b411461067a57806395e44a64146106a5578063a22cb465146106ce578063a849c36e146106f7576101e3565b8063715018a6116100d1578063715018a6146105e45780638462151c146105fb578063853828b6146106385780638da5cb5b1461064f576101e3565b80635ef1e8fd146105115780636096a2781461052d5780636352211e1461056a57806370a08231146105a7576101e3565b806337eff47e1161017a578063544270e211610149578063544270e21461045257806355f804b31461048f578063597d78e1146104b85780635db24868146104d4576101e3565b806337eff47e14610384578063419a8d1b146103af57806342842e0e146103ec5780634f6ccce714610415576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e157806326a49e371461030a5780632f745c5914610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613c8c565b610800565b60405161021c9190614202565b60405180910390f35b34801561023157600080fd5b5061023a610812565b6040516102479190614238565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190613d4d565b6108a4565b6040516102849190614179565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613b86565b6108ea565b005b3480156102c257600080fd5b506102cb610a02565b6040516102d8919061443a565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190613a80565b610a0f565b005b34801561031657600080fd5b50610331600480360381019061032c9190613d4d565b610a6f565b60405161033e919061443a565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190613b86565b610b31565b60405161037b919061443a565b60405180910390f35b34801561039057600080fd5b50610399610bd6565b6040516103a69190614179565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613d4d565b610bfc565b6040516103e3919061443a565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190613a80565b610ccd565b005b34801561042157600080fd5b5061043c60048036038101906104379190613d4d565b610ced565b604051610449919061443a565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190613bc2565b610d84565b6040516104869190614238565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613cde565b6110d2565b005b6104d260048036038101906104cd9190613c11565b6110f0565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190613d76565b611102565b604051610508919061443a565b60405180910390f35b61052b60048036038101906105269190613bc2565b611127565b005b34801561053957600080fd5b50610554600480360381019061054f9190613d4d565b61113b565b604051610561919061443a565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613d4d565b611153565b60405161059e9190614179565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c991906139f2565b611205565b6040516105db919061443a565b60405180910390f35b3480156105f057600080fd5b506105f96112bd565b005b34801561060757600080fd5b50610622600480360381019061061d91906139f2565b6112d1565b60405161062f91906141e0565b60405180910390f35b34801561064457600080fd5b5061064d61144b565b005b34801561065b57600080fd5b50610664611533565b6040516106719190614179565b60405180910390f35b34801561068657600080fd5b5061068f61155d565b60405161069c9190614238565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906139f2565b6115ef565b005b3480156106da57600080fd5b506106f560048036038101906106f09190613b4a565b61169b565b005b34801561070357600080fd5b5061071e60048036038101906107199190613d76565b6116b1565b60405161072b919061443a565b60405180910390f35b34801561074057600080fd5b5061075b60048036038101906107569190613acf565b6116d6565b005b34801561076957600080fd5b50610784600480360381019061077f9190613d4d565b611738565b6040516107919190614238565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613a44565b6117a0565b6040516107ce9190614202565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f991906139f2565b611834565b005b600061080b826118dd565b9050919050565b60606000805461082190614751565b80601f016020809104026020016040519081016040528092919081815260200182805461084d90614751565b801561089a5780601f1061086f5761010080835404028352916020019161089a565b820191906000526020600020905b81548152906001019060200180831161087d57829003601f168201915b5050505050905090565b60006108af82611955565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f582611153565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d906143da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109856119a0565b73ffffffffffffffffffffffffffffffffffffffff1614806109b457506109b3816109ae6119a0565b6117a0565b5b6109f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ea9061435a565b60405180910390fd5b6109fd83836119a8565b505050565b6000600880549050905090565b610a20610a1a6119a0565b82611a61565b610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a569061441a565b60405180910390fd5b610a6a838383611af6565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635eb39968846040518263ffffffff1660e01b8152600401610acd919061443a565b6101e06040518083038186803b158015610ae657600080fd5b505afa158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e9190613d23565b9050806080015160000151915050919050565b6000610b3c83611205565b8210610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b749061425a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635eb39968846040518263ffffffff1660e01b8152600401610c5a919061443a565b6101e06040518083038186803b158015610c7357600080fd5b505afa158015610c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab9190613d23565b90508060200151816080015160200151610cc5919061465d565b915050919050565b610ce8838383604051806020016040528060008152506116d6565b505050565b6000610cf7610a02565b8210610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f906143fa565b60405180910390fd5b60088281548110610d72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b60606000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635eb39968846040518263ffffffff1660e01b8152600401610de3919061443a565b6101e06040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190613d23565b905080608001516020015181602001511415610e88576040518060400160405280600b81526020017f44726f70536f6c644f75740000000000000000000000000000000000000000008152509150506110cb565b8060a0015160200151421015610ed6576040518060400160405280600e81526020017f53616c654e6f74537461727465640000000000000000000000000000000000008152509150506110cb565b806080015160200151848260200151610eef919061457c565b1115610f33576040518060400160405280601881526020017f4e6f74456e6f756768546f6b656e73417661696c61626c6500000000000000008152509150506110cb565b6000801b81610120015114158015610f5257508060a001516060015142105b15611009578060a001516000015184600f60008460000151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc0919061457c565b1115611004576040518060400160405280601181526020017f4d61784d696e74506572416464726573730000000000000000000000000000008152509150506110cb565b6110b7565b8060a001516040015184600e60008460000151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611072919061457c565b11156110b6576040518060400160405280601181526020017f4d61784d696e74506572416464726573730000000000000000000000000000008152509150506110cb565b5b604051806020016040528060008152509150505b9392505050565b6110da611d5d565b8181601091906110eb929190613582565b505050565b6110fc84848484611ddb565b50505050565b600f602052816000526040600020602052806000526040600020600091509150505481565b606061113584838584611ddb565b50505050565b600d6020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906143ba565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d9061433a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c5611d5d565b6112cf60006123ee565b565b606060006112de83611205565b9050600081141561136157600067ffffffffffffffff81111561132a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113585781602001602082028036833780820191505090505b50915050611446565b60008167ffffffffffffffff8111156113a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113d15781602001602082028036833780820191505090505b50905060005b8281101561143f576113e98582610b31565b828281518110611422577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080611438906147b4565b90506113d7565b5080925050505b919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b357600080fd5b505afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190613a1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611530573d6000803e3d6000fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461156c90614751565b80601f016020809104026020016040519081016040528092919081815260200182805461159890614751565b80156115e55780601f106115ba576101008083540402835291602001916115e5565b820191906000526020600020905b8154815290600101906020018083116115c857829003601f168201915b5050505050905090565b6115f7611d5d565b611621817fc35b3779000000000000000000000000000000000000000000000000000000006118b8565b611657576040517f16fab9ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ad6116a66119a0565b83836124b4565b5050565b600e602052816000526040600020602052806000526040600020600091509150505481565b6116e76116e16119a0565b83611a61565b611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d9061441a565b60405180910390fd5b61173284848484612621565b50505050565b606061174382611955565b600061174d61267d565b9050600081511161176d5760405180602001604052806000815250611798565b806117778461270f565b604051602001611788929190614155565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61183c611d5d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a39061429a565b60405180910390fd5b6118b5816123ee565b50565b60006118c3836128bc565b80156118d557506118d48383612909565b5b905092915050565b60006118e8826129c8565b8061194e5750600a6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b61195e81612a42565b61199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906143ba565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a1b83611153565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611a6d83611153565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611aaf5750611aae81856117a0565b5b80611aed57508373ffffffffffffffffffffffffffffffffffffffff16611ad5846108a4565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b1682611153565b73ffffffffffffffffffffffffffffffffffffffff1614611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b63906142ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd3906142fa565b60405180910390fd5b611be7838383612aae565b611bf26000826119a8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c42919061465d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c99919061457c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d58838383612abe565b505050565b611d656119a0565b73ffffffffffffffffffffffffffffffffffffffff16611d83611533565b73ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd09061439a565b60405180910390fd5b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635eb39968856040518263ffffffff1660e01b8152600401611e38919061443a565b6101e06040518083038186803b158015611e5157600080fd5b505afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190613d23565b905080608001516020015181602001511415611ed1576040517fdad62a2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060a0015160200151421015611f13576040517f2d0a346e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806080015160200151838260200151611f2c919061457c565b1115611f64576040517f2d400a1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82816080015160000151611f789190614603565b3414611fb0576040517f22790dad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b81610120015114158015611fcf57508060a001516060015142105b15612157578060a001516000015183600f60008460000151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461203d919061457c565b1115612075576040517fd3e153b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006120ad8383610120015188604051602001612092919061413a565b60405160208183030381529060405280519060200120612ac3565b9050806120e6576040517f8a585be200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600f60008460000151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214a919061457c565b9250508190555050612264565b8060a001516040015183600e60008460000151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121c0919061457c565b11156121f8576040517fd3e153b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600e60008360000151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225c919061457c565b925050819055505b60008160200151826060015161227a919061457c565b905060005b848110156122d4578260000151600d6000838561229c919061457c565b8152602001908152602001600020819055506122c38782846122be919061457c565b612ada565b806122cd906147b4565b905061227f565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a113438c86866040518363ffffffff1660e01b8152600401612332929190614455565b600060405180830381600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b5050505060003411156123e6576000620f42408360400151346123839190614603565b61238d91906145d2565b905060008111156123e4578260e0015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156123e2573d6000803e3d6000fd5b505b505b505050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a9061431a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126149190614202565b60405180910390a3505050565b61262c848484611af6565b61263884848484612af8565b612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e9061427a565b60405180910390fd5b50505050565b60606010805461268c90614751565b80601f01602080910402602001604051908101604052809291908181526020018280546126b890614751565b80156127055780601f106126da57610100808354040283529160200191612705565b820191906000526020600020905b8154815290600101906020018083116126e857829003601f168201915b5050505050905090565b60606000821415612757576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128b7565b600082905060005b60008214612789578080612772906147b4565b915050600a8261278291906145d2565b915061275f565b60008167ffffffffffffffff8111156127cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127fd5781602001600182028036833780820191505090505b5090505b600085146128b057600182612816919061465d565b9150600a856128259190614821565b6030612831919061457c565b60f81b81838151811061286d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128a991906145d2565b9450612801565b8093505050505b919050565b60006128e8827f01ffc9a700000000000000000000000000000000000000000000000000000000612909565b801561290257506129008263ffffffff60e01b612909565b155b9050919050565b6000806301ffc9a760e01b83604051602401612925919061421d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156129b0575060208210155b80156129bc5750600081115b94505050505092915050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a3b5750612a3a82612c8f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b612ab9838383612d71565b505050565b505050565b600082612ad08584612e85565b1490509392505050565b612af4828260405180602001604052806000815250612f01565b5050565b6000612b198473ffffffffffffffffffffffffffffffffffffffff16612f5c565b15612c82578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b426119a0565b8786866040518563ffffffff1660e01b8152600401612b649493929190614194565b602060405180830381600087803b158015612b7e57600080fd5b505af1925050508015612baf57506040513d601f19601f82011682018060405250810190612bac9190613cb5565b60015b612c32573d8060008114612bdf576040519150601f19603f3d011682016040523d82523d6000602084013e612be4565b606091505b50600081511415612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c219061427a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c87565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d5a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d6a5750612d6982612f7f565b5b9050919050565b612d7c838383612fe9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dbf57612dba81612fee565b612dfe565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dfd57612dfc8382613037565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4157612e3c816131a4565b612e80565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e7f57612e7e82826132e7565b5b5b505050565b60008082905060005b8451811015612ef657612ee182868381518110612ed4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151613366565b91508080612eee906147b4565b915050612e8e565b508091505092915050565b612f0b8383613391565b612f186000848484612af8565b612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e9061427a565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161304484611205565b61304e919061465d565b9050600060076000848152602001908152602001600020549050818114613133576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131b8919061465d565b905060006009600084815260200190815260200160002054905060006008838154811061320e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613256577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006132f283611205565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600081831061337e57613379828461356b565b613389565b613388838361356b565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f89061437a565b60405180910390fd5b61340a81612a42565b1561344a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613441906142da565b60405180910390fd5b61345660008383612aae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134a6919061457c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461356760008383612abe565b5050565b600082600052816020526040600020905092915050565b82805461358e90614751565b90600052602060002090601f0160209004810192826135b057600085556135f7565b82601f106135c957803560ff19168380011785556135f7565b828001600101855582156135f7579182015b828111156135f65782358255916020019190600101906135db565b5b5090506136049190613608565b5090565b5b80821115613621576000816000905550600101613609565b5090565b6000613638613633846144a3565b61447e565b9050808382526020820190508285602086028201111561365757600080fd5b60005b85811015613687578161366d8882613738565b84526020840193506020830192505060018101905061365a565b5050509392505050565b60006136a461369f846144cf565b61447e565b9050828152602081018484840111156136bc57600080fd5b6136c784828561470f565b509392505050565b6000813590506136de81614d0f565b92915050565b6000815190506136f381614d0f565b92915050565b600082601f83011261370a57600080fd5b813561371a848260208601613625565b91505092915050565b60008135905061373281614d26565b92915050565b60008135905061374781614d3d565b92915050565b60008151905061375c81614d3d565b92915050565b60008135905061377181614d54565b92915050565b60008151905061378681614d54565b92915050565b600082601f83011261379d57600080fd5b81356137ad848260208601613691565b91505092915050565b60008083601f8401126137c857600080fd5b8235905067ffffffffffffffff8111156137e157600080fd5b6020830191508360018202830111156137f957600080fd5b9250929050565b60006101e0828403121561381357600080fd5b61381e61014061447e565b9050600061382e848285016139dd565b6000830152506020613842848285016139dd565b6020830152506040613856848285016139dd565b604083015250606061386a848285016139dd565b606083015250608061387e84828501613968565b60808301525060e0613892848285016138f4565b60a0830152506101606138a7848285016136e4565b60c0830152506101806138bc848285016136e4565b60e0830152506101a06138d1848285016136e4565b610100830152506101c06138e78482850161374d565b6101208301525092915050565b60006080828403121561390657600080fd5b613910608061447e565b90506000613920848285016139dd565b6000830152506020613934848285016139dd565b6020830152506040613948848285016139dd565b604083015250606061395c848285016139dd565b60608301525092915050565b60006060828403121561397a57600080fd5b613984606061447e565b90506000613994848285016139dd565b60008301525060206139a8848285016139dd565b60208301525060406139bc848285016139dd565b60408301525092915050565b6000813590506139d781614d6b565b92915050565b6000815190506139ec81614d6b565b92915050565b600060208284031215613a0457600080fd5b6000613a12848285016136cf565b91505092915050565b600060208284031215613a2d57600080fd5b6000613a3b848285016136e4565b91505092915050565b60008060408385031215613a5757600080fd5b6000613a65858286016136cf565b9250506020613a76858286016136cf565b9150509250929050565b600080600060608486031215613a9557600080fd5b6000613aa3868287016136cf565b9350506020613ab4868287016136cf565b9250506040613ac5868287016139c8565b9150509250925092565b60008060008060808587031215613ae557600080fd5b6000613af3878288016136cf565b9450506020613b04878288016136cf565b9350506040613b15878288016139c8565b925050606085013567ffffffffffffffff811115613b3257600080fd5b613b3e8782880161378c565b91505092959194509250565b60008060408385031215613b5d57600080fd5b6000613b6b858286016136cf565b9250506020613b7c85828601613723565b9150509250929050565b60008060408385031215613b9957600080fd5b6000613ba7858286016136cf565b9250506020613bb8858286016139c8565b9150509250929050565b600080600060608486031215613bd757600080fd5b6000613be5868287016136cf565b9350506020613bf6868287016139c8565b9250506040613c07868287016139c8565b9150509250925092565b60008060008060808587031215613c2757600080fd5b6000613c35878288016136cf565b9450506020613c46878288016139c8565b9350506040613c57878288016139c8565b925050606085013567ffffffffffffffff811115613c7457600080fd5b613c80878288016136f9565b91505092959194509250565b600060208284031215613c9e57600080fd5b6000613cac84828501613762565b91505092915050565b600060208284031215613cc757600080fd5b6000613cd584828501613777565b91505092915050565b60008060208385031215613cf157600080fd5b600083013567ffffffffffffffff811115613d0b57600080fd5b613d17858286016137b6565b92509250509250929050565b60006101e08284031215613d3657600080fd5b6000613d4484828501613800565b91505092915050565b600060208284031215613d5f57600080fd5b6000613d6d848285016139c8565b91505092915050565b60008060408385031215613d8957600080fd5b6000613d97858286016139c8565b9250506020613da8858286016136cf565b9150509250929050565b6000613dbe838361411c565b60208301905092915050565b613dd381614691565b82525050565b613dea613de582614691565b6147fd565b82525050565b6000613dfb82614510565b613e05818561453e565b9350613e1083614500565b8060005b83811015613e41578151613e288882613db2565b9750613e3383614531565b925050600181019050613e14565b5085935050505092915050565b613e57816146a3565b82525050565b613e66816146b9565b82525050565b6000613e778261451b565b613e81818561454f565b9350613e9181856020860161471e565b613e9a8161490e565b840191505092915050565b6000613eb082614526565b613eba8185614560565b9350613eca81856020860161471e565b613ed38161490e565b840191505092915050565b6000613ee982614526565b613ef38185614571565b9350613f0381856020860161471e565b80840191505092915050565b6000613f1c602b83614560565b9150613f278261492c565b604082019050919050565b6000613f3f603283614560565b9150613f4a8261497b565b604082019050919050565b6000613f62602683614560565b9150613f6d826149ca565b604082019050919050565b6000613f85602583614560565b9150613f9082614a19565b604082019050919050565b6000613fa8601c83614560565b9150613fb382614a68565b602082019050919050565b6000613fcb602483614560565b9150613fd682614a91565b604082019050919050565b6000613fee601983614560565b9150613ff982614ae0565b602082019050919050565b6000614011602983614560565b915061401c82614b09565b604082019050919050565b6000614034603e83614560565b915061403f82614b58565b604082019050919050565b6000614057602083614560565b915061406282614ba7565b602082019050919050565b600061407a602083614560565b915061408582614bd0565b602082019050919050565b600061409d601883614560565b91506140a882614bf9565b602082019050919050565b60006140c0602183614560565b91506140cb82614c22565b604082019050919050565b60006140e3602c83614560565b91506140ee82614c71565b604082019050919050565b6000614106602e83614560565b915061411182614cc0565b604082019050919050565b61412581614705565b82525050565b61413481614705565b82525050565b60006141468284613dd9565b60148201915081905092915050565b60006141618285613ede565b915061416d8284613ede565b91508190509392505050565b600060208201905061418e6000830184613dca565b92915050565b60006080820190506141a96000830187613dca565b6141b66020830186613dca565b6141c3604083018561412b565b81810360608301526141d58184613e6c565b905095945050505050565b600060208201905081810360008301526141fa8184613df0565b905092915050565b60006020820190506142176000830184613e4e565b92915050565b60006020820190506142326000830184613e5d565b92915050565b600060208201905081810360008301526142528184613ea5565b905092915050565b6000602082019050818103600083015261427381613f0f565b9050919050565b6000602082019050818103600083015261429381613f32565b9050919050565b600060208201905081810360008301526142b381613f55565b9050919050565b600060208201905081810360008301526142d381613f78565b9050919050565b600060208201905081810360008301526142f381613f9b565b9050919050565b6000602082019050818103600083015261431381613fbe565b9050919050565b6000602082019050818103600083015261433381613fe1565b9050919050565b6000602082019050818103600083015261435381614004565b9050919050565b6000602082019050818103600083015261437381614027565b9050919050565b600060208201905081810360008301526143938161404a565b9050919050565b600060208201905081810360008301526143b38161406d565b9050919050565b600060208201905081810360008301526143d381614090565b9050919050565b600060208201905081810360008301526143f3816140b3565b9050919050565b60006020820190508181036000830152614413816140d6565b9050919050565b60006020820190508181036000830152614433816140f9565b9050919050565b600060208201905061444f600083018461412b565b92915050565b600060408201905061446a600083018561412b565b614477602083018461412b565b9392505050565b6000614488614499565b90506144948282614783565b919050565b6000604051905090565b600067ffffffffffffffff8211156144be576144bd6148df565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144ea576144e96148df565b5b6144f38261490e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061458782614705565b915061459283614705565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145c7576145c6614852565b5b828201905092915050565b60006145dd82614705565b91506145e883614705565b9250826145f8576145f7614881565b5b828204905092915050565b600061460e82614705565b915061461983614705565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465257614651614852565b5b828202905092915050565b600061466882614705565b915061467383614705565b92508282101561468657614685614852565b5b828203905092915050565b600061469c826146e5565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561473c578082015181840152602081019050614721565b8381111561474b576000848401525b50505050565b6000600282049050600182168061476957607f821691505b6020821081141561477d5761477c6148b0565b5b50919050565b61478c8261490e565b810181811067ffffffffffffffff821117156147ab576147aa6148df565b5b80604052505050565b60006147bf82614705565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f2576147f1614852565b5b600182019050919050565b60006148088261480f565b9050919050565b600061481a8261491f565b9050919050565b600061482c82614705565b915061483783614705565b92508261484757614846614881565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b614d1881614691565b8114614d2357600080fd5b50565b614d2f816146a3565b8114614d3a57600080fd5b50565b614d46816146af565b8114614d5157600080fd5b50565b614d5d816146b9565b8114614d6857600080fd5b50565b614d7481614705565b8114614d7f57600080fd5b5056fea2646970667358221220f5f9c54d9fac252d195eaf8a1865543298886e4cf072c45c5a32e82bf03cb8a564736f6c63430008040033000000000000000000000000ea143996ddfaf5f2318eea25d311b5e6bc8d912e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6d657461646174612e616e6f74686572626c6f636b2e696f2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c616e6f74686572626c6f636b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000541424e4654000000000000000000000000000000000000000000000000000000