6080604052604051620050fb380380620050fb8339818101604052810190620000299190620006d4565b6040518060400160405280600481526020017f30784169000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f30584149000000000000000000000000000000000000000000000000000000008152508160039081620000a69190620009a0565b508060049081620000b89190620009a0565b5050506000620000cd620004a460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506019600c8190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860006200020c620004ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000816200039c620004d660201b60201c565b600a620003aa919062000c17565b633b9aca00620003bb919062000c68565b620003c7919062000cb3565b9050620003ea620003dd620004ac60201b60201c565b82620004df60201b60201c565b620003fc3083620004df60201b60201c565b6200040c620004d660201b60201c565b600a6200041a919062000c17565b629896806200042a919062000c68565b600e8190555062000440620004d660201b60201c565b600a6200044e919062000c17565b620f42406200045e919062000c68565b600d819055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055505050505062000dda565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005489062000d4f565b60405180910390fd5b806002600082825462000565919062000d71565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005bc919062000d71565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000623919062000dbd565b60405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006618262000634565b9050919050565b620006738162000654565b81146200067f57600080fd5b50565b600081519050620006938162000668565b92915050565b6000819050919050565b620006ae8162000699565b8114620006ba57600080fd5b50565b600081519050620006ce81620006a3565b92915050565b600080600060608486031215620006f057620006ef6200062f565b5b6000620007008682870162000682565b9350506020620007138682870162000682565b92505060406200072686828701620006bd565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007b257607f821691505b602082108103620007c857620007c76200076a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007f3565b6200083e8683620007f3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008816200087b620008758462000699565b62000856565b62000699565b9050919050565b6000819050919050565b6200089d8362000860565b620008b5620008ac8262000888565b84845462000800565b825550505050565b600090565b620008cc620008bd565b620008d981848462000892565b505050565b5b818110156200090157620008f5600082620008c2565b600181019050620008df565b5050565b601f82111562000950576200091a81620007ce565b6200092584620007e3565b8101602085101562000935578190505b6200094d6200094485620007e3565b830182620008de565b50505b505050565b600082821c905092915050565b6000620009756000198460080262000955565b1980831691505092915050565b600062000990838362000962565b9150826002028217905092915050565b620009ab8262000730565b67ffffffffffffffff811115620009c757620009c66200073b565b5b620009d3825462000799565b620009e082828562000905565b600060209050601f83116001811462000a18576000841562000a03578287015190505b62000a0f858262000982565b86555062000a7f565b601f19841662000a2886620007ce565b60005b8281101562000a525784890151825560018201915060208501945060208101905062000a2b565b8683101562000a72578489015162000a6e601f89168262000962565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b155780860481111562000aed5762000aec62000a87565b5b600185161562000afd5780820291505b808102905062000b0d8562000ab6565b945062000acd565b94509492505050565b60008262000b30576001905062000c03565b8162000b40576000905062000c03565b816001811462000b59576002811462000b645762000b9a565b600191505062000c03565b60ff84111562000b795762000b7862000a87565b5b8360020a91508482111562000b935762000b9262000a87565b5b5062000c03565b5060208310610133831016604e8410600b841016171562000bd45782820a90508381111562000bce5762000bcd62000a87565b5b62000c03565b62000be3848484600162000ac3565b9250905081840481111562000bfd5762000bfc62000a87565b5b81810290505b9392505050565b600060ff82169050919050565b600062000c248262000699565b915062000c318362000c0a565b925062000c607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b1e565b905092915050565b600062000c758262000699565b915062000c828362000699565b925082820262000c928162000699565b9150828204841483151762000cac5762000cab62000a87565b5b5092915050565b600062000cc08262000699565b915062000ccd8362000699565b925082820390508181111562000ce85762000ce762000a87565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d37601f8362000cee565b915062000d448262000cff565b602082019050919050565b6000602082019050818103600083015262000d6a8162000d28565b9050919050565b600062000d7e8262000699565b915062000d8b8362000699565b925082820190508082111562000da65762000da562000a87565b5b92915050565b62000db78162000699565b82525050565b600060208201905062000dd4600083018462000dac565b92915050565b6143118062000dea6000396000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063a9059cbb116100a0578063e0f3ccf51161006f578063e0f3ccf514610710578063e3b24c8014610727578063e96fada214610750578063f2fde38b1461077b578063f9d0831a146107a4576101f9565b8063a9059cbb14610642578063acef1a441461067f578063c0246668146106aa578063dd62ed3e146106d3576101f9565b80638f3fa860116100dc5780638f3fa8601461058657806395d89b41146105b15780639d0014b1146105dc578063a457c2d714610605576101f9565b8063715018a6146105045780637c08b9641461051b5780638a8c523c146105445780638da5cb5b1461055b576101f9565b806339509351116101855780636b67c4df116101545780636b67c4df146104465780636ddd1713146104715780636fd8fb7a1461049c57806370a08231146104c7576101f9565b8063395093511461037657806349bd5a5e146103b35780634ada218b146103de5780634fbee19314610409576101f9565b806318160ddd116101c157806318160ddd146102ba578063239be29a146102e557806323b872dd1461030e578063313ce5671461034b576101f9565b806306fdde03146101fe578063095ea7b3146102295780630f198ee8146102665780631694505e1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107cd565b6040516102209190612f39565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190612ff4565b61085f565b60405161025d919061304f565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061306a565b61087d565b005b34801561029b57600080fd5b506102a4610999565b6040516102b191906130f6565b60405180910390f35b3480156102c657600080fd5b506102cf6109bf565b6040516102dc9190613120565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613167565b6109c9565b005b34801561031a57600080fd5b5061033560048036038101906103309190613194565b610b18565b604051610342919061304f565b60405180910390f35b34801561035757600080fd5b50610360610c37565b60405161036d9190613203565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612ff4565b610c40565b6040516103aa919061304f565b60405180910390f35b3480156103bf57600080fd5b506103c8610cec565b6040516103d5919061322d565b60405180910390f35b3480156103ea57600080fd5b506103f3610d12565b604051610400919061304f565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613248565b610d25565b60405161043d919061304f565b60405180910390f35b34801561045257600080fd5b5061045b610d7b565b6040516104689190613120565b60405180910390f35b34801561047d57600080fd5b50610486610d81565b604051610493919061304f565b60405180910390f35b3480156104a857600080fd5b506104b1610d94565b6040516104be9190613120565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613248565b610d9a565b6040516104fb9190613120565b60405180910390f35b34801561051057600080fd5b50610519610de2565b005b34801561052757600080fd5b50610542600480360381019061053d9190613248565b610f3a565b005b34801561055057600080fd5b50610559611118565b005b34801561056757600080fd5b506105706116d2565b60405161057d919061322d565b60405180910390f35b34801561059257600080fd5b5061059b6116fc565b6040516105a89190613120565b60405180910390f35b3480156105bd57600080fd5b506105c6611702565b6040516105d39190612f39565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe919061306a565b611794565b005b34801561061157600080fd5b5061062c60048036038101906106279190612ff4565b61186c565b604051610639919061304f565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190612ff4565b611957565b604051610676919061304f565b60405180910390f35b34801561068b57600080fd5b50610694611975565b6040516106a19190613120565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613275565b61197b565b005b3480156106df57600080fd5b506106fa60048036038101906106f591906132b5565b611abb565b6040516107079190613120565b60405180910390f35b34801561071c57600080fd5b50610725611b42565b005b34801561073357600080fd5b5061074e6004803603810190610749919061306a565b611bf2565b005b34801561075c57600080fd5b50610765611d0e565b604051610772919061322d565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d9190613248565b611d34565b005b3480156107b057600080fd5b506107cb60048036038101906107c69190613248565b611efa565b005b6060600380546107dc90613324565b80601f016020809104026020016040519081016040528092919081815260200182805461080890613324565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061087361086c61215e565b8484612166565b6001905092915050565b61088561215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b906133a1565b60405180910390fd5b600c548110610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90613433565b60405180910390fd5b80600c819055507f521fe74e1c24ea5dc1327c29145ebc90bae09bc5a6f6bea118b4ad87793327a58160405161098e9190613120565b60405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6109d161215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906133a1565b60405180910390fd5b801515600b60019054906101000a900460ff16151503610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac9061349f565b60405180910390fd5b80600b60016101000a81548160ff0219169083151502179055507f0b24deddd077e0149099adf20869b94ebb4b0898a1068e9af5e30529f596e532600b60019054906101000a900460ff16604051610b0d919061304f565b60405180910390a150565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b6461215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c205782811015610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290613531565b60405180910390fd5b610c1f85610c1761215e565b858403612166565b5b610c2b85858561232f565b60019150509392505050565b60006012905090565b6000610ce2610c4d61215e565b848460016000610c5b61215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cdd9190613580565b612166565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b600b60019054906101000a900460ff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dea61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f4261215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc8906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561103c575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613626565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fce24358e1d81b90be8bb8786b891404133aa63ffde0e56b69ccf25a5e3c4df06600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161110d919061322d565b60405180910390a150565b61112061215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a6906133a1565b60405180910390fd5b60001515600b60029054906101000a900460ff16151514611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613692565b60405180910390fd5b61125230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612166565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e391906136c7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139091906136c7565b6040518363ffffffff1660e01b81526004016113ad9291906136f4565b6020604051808303816000875af11580156113cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f091906136c7565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061147930610d9a565b6000806114846116d2565b426040518863ffffffff1660e01b81526004016114a696959493929190613758565b60606040518083038185885af11580156114c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114e991906137ce565b505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161158b929190613821565b6020604051808303816000875af11580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce919061385f565b506001600b60026101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555042600a81905550600160086000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3eb2d65e1de77434db1b2cb0645de0085059e6e514d7b9641fdc2978d8e40c40600b60029054906101000a900460ff16600a546040516116c892919061388c565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606004805461171190613324565b80601f016020809104026020016040519081016040528092919081815260200182805461173d90613324565b801561178a5780601f1061175f5761010080835404028352916020019161178a565b820191906000526020600020905b81548152906001019060200180831161176d57829003601f168201915b5050505050905090565b61179c61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906133a1565b60405180910390fd5b80600d819055507fb090ae518da13bb076e9fad6694791d1d427db3284f7ac7321fbeafac08c7b27816040516118619190613120565b60405180910390a150565b6000806001600061187b61215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613927565b60405180910390fd5b61194c61194361215e565b85858403612166565b600191505092915050565b600061196b61196461215e565b848461232f565b6001905092915050565b600d5481565b61198361215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a09906133a1565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611aaf919061304f565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4a61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906133a1565b60405180910390fd5b6000611be430610d9a565b9050611bef816128d3565b50565b611bfa61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906133a1565b60405180910390fd5b600e548111611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc4906139b9565b60405180910390fd5b80600e819055507f69626ae9392dcbdfaecc4d3af4d6c00e0bb3888f512459d89551c2762e406c4181604051611d039190613120565b60405180910390a150565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d3c61215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc2906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613a4b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f0261215e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f88906133a1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690613add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120625761205c473373ffffffffffffffffffffffffffffffffffffffff16612b8590919063ffffffff16565b5061215b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120b8919061322d565b602060405180830381865afa1580156120d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f99190613afd565b6040518363ffffffff1660e01b8152600401612116929190613821565b6020604051808303816000875af1158015612135573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612159919061385f565b505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90613b9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90613c2e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123229190613120565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361239e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239590613c9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240490613d06565b60405180910390fd5b600b60029054906101000a900460ff16806124715750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806124c55750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90613d72565b60405180910390fd5b6000810361251d5761251883836000612c40565b6128ce565b600061252830610d9a565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ce5750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156125e65750600b60009054906101000a900460ff165b156125f457600090506126ca565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806126b55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156126b45750600b60029054906101000a900460ff165b5b156126c457600c5490506126c9565b600090505b5b600081111561270a576000606482856126e39190613d92565b6126ed9190613e03565b905080846126fb9190613e34565b9350612708863083612c40565b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127dd57600d548211801561277d5750600b60009054906101000a900460ff16155b80156127955750600b60019054906101000a900460ff165b156127dc576001600b60006101000a81548160ff0219169083151502179055506127c0600d546128d3565b6000600b60006101000a81548160ff0219169083151502179055505b5b600b60029054906101000a900460ff1680156128435750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561285c5750600b60009054906101000a900460ff16155b156128c057600061286c85610d9a565b9050600e54848261287d9190613580565b11156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590613eb4565b60405180910390fd5b505b6128cb858585612c40565b50505b505050565b60004790506000600267ffffffffffffffff8111156128f5576128f4613ed4565b5b6040519080825280602002602001820160405280156129235781602001602082028036833780820191505090505b509050308160008151811061293b5761293a613f03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0691906136c7565b81600181518110612a1a57612a19613f03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612ab8959493929190613ff0565b600060405180830381600087803b158015612ad257600080fd5b505af1158015612ae6573d6000803e3d6000fd5b5050505060008247612af89190613e34565b9050612b4581600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b8590919063ffffffff16565b507f54c5e193a68e36b996e0c85b164c5953625d951c488fbad0e67aa32e1c45307b8482604051612b7792919061404a565b60405180910390a150505050565b600081471015612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc1906140bf565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612bf090614110565b60006040518083038185875af1925050503d8060008114612c2d576040519150601f19603f3d011682016040523d82523d6000602084013e612c32565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614197565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1590614229565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b906142bb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e379190613580565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e9b9190613120565b60405180910390a350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee3578082015181840152602081019050612ec8565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f0b82612ea9565b612f158185612eb4565b9350612f25818560208601612ec5565b612f2e81612eef565b840191505092915050565b60006020820190508181036000830152612f538184612f00565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f8b82612f60565b9050919050565b612f9b81612f80565b8114612fa657600080fd5b50565b600081359050612fb881612f92565b92915050565b6000819050919050565b612fd181612fbe565b8114612fdc57600080fd5b50565b600081359050612fee81612fc8565b92915050565b6000806040838503121561300b5761300a612f5b565b5b600061301985828601612fa9565b925050602061302a85828601612fdf565b9150509250929050565b60008115159050919050565b61304981613034565b82525050565b60006020820190506130646000830184613040565b92915050565b6000602082840312156130805761307f612f5b565b5b600061308e84828501612fdf565b91505092915050565b6000819050919050565b60006130bc6130b76130b284612f60565b613097565b612f60565b9050919050565b60006130ce826130a1565b9050919050565b60006130e0826130c3565b9050919050565b6130f0816130d5565b82525050565b600060208201905061310b60008301846130e7565b92915050565b61311a81612fbe565b82525050565b60006020820190506131356000830184613111565b92915050565b61314481613034565b811461314f57600080fd5b50565b6000813590506131618161313b565b92915050565b60006020828403121561317d5761317c612f5b565b5b600061318b84828501613152565b91505092915050565b6000806000606084860312156131ad576131ac612f5b565b5b60006131bb86828701612fa9565b93505060206131cc86828701612fa9565b92505060406131dd86828701612fdf565b9150509250925092565b600060ff82169050919050565b6131fd816131e7565b82525050565b600060208201905061321860008301846131f4565b92915050565b61322781612f80565b82525050565b6000602082019050613242600083018461321e565b92915050565b60006020828403121561325e5761325d612f5b565b5b600061326c84828501612fa9565b91505092915050565b6000806040838503121561328c5761328b612f5b565b5b600061329a85828601612fa9565b92505060206132ab85828601613152565b9150509250929050565b600080604083850312156132cc576132cb612f5b565b5b60006132da85828601612fa9565b92505060206132eb85828601612fa9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333c57607f821691505b60208210810361334f5761334e6132f5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338b602083612eb4565b915061339682613355565b602082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f307841693a204e657720666565206d757374206265206c6f776572207468616e60008201527f206f6c6420666565210000000000000000000000000000000000000000000000602082015250565b600061341d602983612eb4565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f43757272656e746c79206174207468652073616d652073746167650000000000600082015250565b6000613489601b83612eb4565b915061349482613453565b602082019050919050565b600060208201905081810360008301526134b88161347c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061351b602883612eb4565b9150613526826134bf565b604082019050919050565b6000602082019050818103600083015261354a8161350e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061358b82612fbe565b915061359683612fbe565b92508282019050808211156135ae576135ad613551565b5b92915050565b7f4d61726b6574696e67204665652072656365697665722063616e6e6f7420626560008201527f20746865207a65726f206f722064656164206164647265737300000000000000602082015250565b6000613610603983612eb4565b915061361b826135b4565b604082019050919050565b6000602082019050818103600083015261363f81613603565b9050919050565b7f307841693a2074726164696e6720616c726561647920656e61626c6564210000600082015250565b600061367c601e83612eb4565b915061368782613646565b602082019050919050565b600060208201905081810360008301526136ab8161366f565b9050919050565b6000815190506136c181612f92565b92915050565b6000602082840312156136dd576136dc612f5b565b5b60006136eb848285016136b2565b91505092915050565b6000604082019050613709600083018561321e565b613716602083018461321e565b9392505050565b6000819050919050565b600061374261373d6137388461371d565b613097565b612fbe565b9050919050565b61375281613727565b82525050565b600060c08201905061376d600083018961321e565b61377a6020830188613111565b6137876040830187613749565b6137946060830186613749565b6137a1608083018561321e565b6137ae60a0830184613111565b979650505050505050565b6000815190506137c881612fc8565b92915050565b6000806000606084860312156137e7576137e6612f5b565b5b60006137f5868287016137b9565b9350506020613806868287016137b9565b9250506040613817868287016137b9565b9150509250925092565b6000604082019050613836600083018561321e565b6138436020830184613111565b9392505050565b6000815190506138598161313b565b92915050565b60006020828403121561387557613874612f5b565b5b60006138838482850161384a565b91505092915050565b60006040820190506138a16000830185613040565b6138ae6020830184613111565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613911602583612eb4565b915061391c826138b5565b604082019050919050565b6000602082019050818103600083015261394081613904565b9050919050565b7f307841693a204e6577206c696d6974206d75737420626520686967686572207460008201527f68616e206f6c6465722100000000000000000000000000000000000000000000602082015250565b60006139a3602a83612eb4565b91506139ae82613947565b604082019050919050565b600060208201905081810360008301526139d281613996565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a35602683612eb4565b9150613a40826139d9565b604082019050919050565b60006020820190508181036000830152613a6481613a28565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000613ac7603783612eb4565b9150613ad282613a6b565b604082019050919050565b60006020820190508181036000830152613af681613aba565b9050919050565b600060208284031215613b1357613b12612f5b565b5b6000613b21848285016137b9565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b86602483612eb4565b9150613b9182613b2a565b604082019050919050565b60006020820190508181036000830152613bb581613b79565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c18602283612eb4565b9150613c2382613bbc565b604082019050919050565b60006020820190508181036000830152613c4781613c0b565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6000613c84601e83612eb4565b9150613c8f82613c4e565b602082019050919050565b60006020820190508181036000830152613cb381613c77565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000613cf0601c83612eb4565b9150613cfb82613cba565b602082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000613d5c601883612eb4565b9150613d6782613d26565b602082019050919050565b60006020820190508181036000830152613d8b81613d4f565b9050919050565b6000613d9d82612fbe565b9150613da883612fbe565b9250828202613db681612fbe565b91508282048414831517613dcd57613dcc613551565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e0e82612fbe565b9150613e1983612fbe565b925082613e2957613e28613dd4565b5b828204905092915050565b6000613e3f82612fbe565b9150613e4a83612fbe565b9250828203905081811115613e6257613e61613551565b5b92915050565b7f4d6178696d756d2077616c6c65742073697a6520657863656564656421000000600082015250565b6000613e9e601d83612eb4565b9150613ea982613e68565b602082019050919050565b60006020820190508181036000830152613ecd81613e91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f6781612f80565b82525050565b6000613f798383613f5e565b60208301905092915050565b6000602082019050919050565b6000613f9d82613f32565b613fa78185613f3d565b9350613fb283613f4e565b8060005b83811015613fe3578151613fca8882613f6d565b9750613fd583613f85565b925050600181019050613fb6565b5085935050505092915050565b600060a0820190506140056000830188613111565b6140126020830187613749565b81810360408301526140248186613f92565b9050614033606083018561321e565b6140406080830184613111565b9695505050505050565b600060408201905061405f6000830185613111565b61406c6020830184613111565b9392505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006140a9601d83612eb4565b91506140b482614073565b602082019050919050565b600060208201905081810360008301526140d88161409c565b9050919050565b600081905092915050565b50565b60006140fa6000836140df565b9150614105826140ea565b600082019050919050565b600061411b826140ed565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614181602583612eb4565b915061418c82614125565b604082019050919050565b600060208201905081810360008301526141b081614174565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614213602383612eb4565b915061421e826141b7565b604082019050919050565b6000602082019050818103600083015261424281614206565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006142a5602683612eb4565b91506142b082614249565b604082019050919050565b600060208201905081810360008301526142d481614298565b905091905056fea2646970667358221220100f71edd4eac6e821c9684dd5ee167f636de76873974617802f0e6492f0f57e64736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008d8943752ace652ae81caf4d5b51384665def6cb000000000000000000000000000000000000000002e87669c308736a04000000