6080604052611770600a556001600b556064600c55600a600d5566038d7ea4c68000600e556001601060006101000a81548160ff0219169083151502179055506040518060200160405280600081525060119080519060200190620000669291906200088f565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060129080519060200190620000b49291906200088f565b50348015620000c257600080fd5b5060405162004c7538038062004c758339818101604052810190620000e8919062000adc565b6040518060400160405280600f81526020017f486167726964732077697a6172647300000000000000000000000000000000008152506040518060400160405280600781526020017f524950484752440000000000000000000000000000000000000000000000000081525081600290805190602001906200016c9291906200088f565b508060039080519060200190620001859291906200088f565b50620001966200020160201b60201c565b6000819055505050620001be620001b26200020a60201b60201c565b6200021260201b60201c565b6001600981905550620001d781620002d860201b60201c565b620001fa620001eb6200020a60201b60201c565b600b546200030460201b60201c565b5062000db5565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002e86200032a60201b60201c565b8060119080519060200190620003009291906200088f565b5050565b62000326828260405180602001604052806000815250620003bb60201b60201c565b5050565b6200033a6200020a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003606200046c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b09062000b8e565b60405180910390fd5b565b620003cd83836200049660201b60201c565b60008373ffffffffffffffffffffffffffffffffffffffff163b146200046757600080549050600083820390505b6200041660008683806001019450866200069560201b60201c565b6200044d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110620003fb5781600054146200046457600080fd5b50505b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000504576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141562000540576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200055560008483856200080760201b60201c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550620005e483620005c660008660006200080d60201b60201c565b620005d7856200083d60201b60201c565b176200084d60201b60201c565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821062000608578060008190555050506200069060008483856200087860201b60201c565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006c36200087e60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006e7949392919062000c6d565b602060405180830381600087803b1580156200070257600080fd5b505af19250505080156200073657506040513d601f19601f8201168201806040525081019062000733919062000d1e565b60015b620007b4573d806000811462000769576040519150601f19603f3d011682016040523d82523d6000602084013e6200076e565b606091505b50600081511415620007ac576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b60008060e883901c905060e86200082c8686846200088660201b60201c565b62ffffff16901b9150509392505050565b60006001821460e11b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b60009392505050565b8280546200089d9062000d7f565b90600052602060002090601f016020900481019282620008c157600085556200090d565b82601f10620008dc57805160ff19168380011785556200090d565b828001600101855582156200090d579182015b828111156200090c578251825591602001919060010190620008ef565b5b5090506200091c919062000920565b5090565b5b808211156200093b57600081600090555060010162000921565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620009a8826200095d565b810181811067ffffffffffffffff82111715620009ca57620009c96200096e565b5b80604052505050565b6000620009df6200093f565b9050620009ed82826200099d565b919050565b600067ffffffffffffffff82111562000a105762000a0f6200096e565b5b62000a1b826200095d565b9050602081019050919050565b60005b8381101562000a4857808201518184015260208101905062000a2b565b8381111562000a58576000848401525b50505050565b600062000a7562000a6f84620009f2565b620009d3565b90508281526020810184848401111562000a945762000a9362000958565b5b62000aa184828562000a28565b509392505050565b600082601f83011262000ac15762000ac062000953565b5b815162000ad384826020860162000a5e565b91505092915050565b60006020828403121562000af55762000af462000949565b5b600082015167ffffffffffffffff81111562000b165762000b156200094e565b5b62000b248482850162000aa9565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b7660208362000b2d565b915062000b838262000b3e565b602082019050919050565b6000602082019050818103600083015262000ba98162000b67565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bdd8262000bb0565b9050919050565b62000bef8162000bd0565b82525050565b6000819050919050565b62000c0a8162000bf5565b82525050565b600081519050919050565b600082825260208201905092915050565b600062000c398262000c10565b62000c45818562000c1b565b935062000c5781856020860162000a28565b62000c62816200095d565b840191505092915050565b600060808201905062000c84600083018762000be4565b62000c93602083018662000be4565b62000ca2604083018562000bff565b818103606083015262000cb6818462000c2c565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000cf88162000cc1565b811462000d0457600080fd5b50565b60008151905062000d188162000ced565b92915050565b60006020828403121562000d375762000d3662000949565b5b600062000d478482850162000d07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d9857607f821691505b6020821081141562000daf5762000dae62000d50565b5b50919050565b613eb08062000dc56000396000f3fe6080604052600436106102255760003560e01c8063639814e011610123578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd146107fa578063d5abeb0114610837578063dc33e68114610862578063e985e9c51461089f578063f2fde38b146108dc57610225565b8063a0712d6814610724578063a22cb46514610740578063a40d36cd14610769578063b88d4fde14610794578063c23dc68f146107bd57610225565b80638462151c116100f25780638462151c1461062b5780638da5cb5b1461066857806395d89b411461069357806399a2557a146106be5780639b7f13d0146106fb57610225565b8063639814e01461058357806370a08231146105ae578063715018a6146105eb5780637ec4a6591461060257610225565b8063389fcf06116101b15780635503a0e8116101755780635503a0e8146104885780635bbb2177146104b35780635c975abb146104f057806362b99ad41461051b5780636352211e1461054657610225565b8063389fcf06146103cb5780633ccfd60b146104085780633f4ba83a1461041f57806342842e0e1461043657806344a0d68a1461045f57610225565b806313faede6116101f857806313faede6146102f857806316ba10e01461032357806318160ddd1461034c57806323b872dd1461037757806331448007146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612b1b565b610905565b60405161025e9190612b63565b60405180910390f35b34801561027357600080fd5b5061027c610997565b6040516102899190612c17565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612c6f565b610a29565b6040516102c69190612cdd565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612d24565b610aa5565b005b34801561030457600080fd5b5061030d610be6565b60405161031a9190612d73565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190612ec3565b610bec565b005b34801561035857600080fd5b50610361610c0e565b60405161036e9190612d73565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190612f0c565b610c25565b005b3480156103ac57600080fd5b506103b5610f4a565b6040516103c29190612d73565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612f5f565b610f50565b6040516103ff9190612b63565b60405180910390f35b34801561041457600080fd5b5061041d610f70565b005b34801561042b57600080fd5b50610434610fc1565b005b34801561044257600080fd5b5061045d60048036038101906104589190612f0c565b610ff5565b005b34801561046b57600080fd5b5061048660048036038101906104819190612c6f565b611015565b005b34801561049457600080fd5b5061049d611027565b6040516104aa9190612c17565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613054565b6110b5565b6040516104e79190613200565b60405180910390f35b3480156104fc57600080fd5b50610505611176565b6040516105129190612b63565b60405180910390f35b34801561052757600080fd5b50610530611189565b60405161053d9190612c17565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612c6f565b611217565b60405161057a9190612cdd565b60405180910390f35b34801561058f57600080fd5b50610598611229565b6040516105a59190612d73565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190612f5f565b61122f565b6040516105e29190612d73565b60405180910390f35b3480156105f757600080fd5b506106006112e8565b005b34801561060e57600080fd5b5061062960048036038101906106249190612ec3565b6112fc565b005b34801561063757600080fd5b50610652600480360381019061064d9190612f5f565b61131e565b60405161065f91906132e0565b60405180910390f35b34801561067457600080fd5b5061067d611468565b60405161068a9190612cdd565b60405180910390f35b34801561069f57600080fd5b506106a8611492565b6040516106b59190612c17565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190613302565b611524565b6040516106f291906132e0565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190612c6f565b611738565b005b61073e60048036038101906107399190612c6f565b61174a565b005b34801561074c57600080fd5b5061076760048036038101906107629190613381565b611add565b005b34801561077557600080fd5b5061077e611c55565b60405161078b9190612d73565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613462565b611c5b565b005b3480156107c957600080fd5b506107e460048036038101906107df9190612c6f565b611cce565b6040516107f1919061353a565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190612c6f565b611d38565b60405161082e9190612c17565b60405180910390f35b34801561084357600080fd5b5061084c611de2565b6040516108599190612d73565b60405180910390f35b34801561086e57600080fd5b5061088960048036038101906108849190612f5f565b611de8565b6040516108969190612d73565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613555565b611dfa565b6040516108d39190612b63565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612f5f565b611e8e565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109905750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546109a6906135c4565b80601f01602080910402602001604051908101604052809291908181526020018280546109d2906135c4565b8015610a1f5780601f106109f457610100808354040283529160200191610a1f565b820191906000526020600020905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b6000610a3482611f12565b610a6a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab082611217565b90508073ffffffffffffffffffffffffffffffffffffffff16610ad1611f71565b73ffffffffffffffffffffffffffffffffffffffff1614610b3457610afd81610af8611f71565b611dfa565b610b33576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600e5481565b610bf4611f79565b8060129080519060200190610c0a9291906129bd565b5050565b6000610c18611ff7565b6001546000540303905090565b6000610c3082612000565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c97576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ca3846120ce565b91509150610cb98187610cb4611f71565b6120f0565b610d0557610cce86610cc9611f71565b611dfa565b610d04576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d6c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d798686866001612134565b8015610d8457600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5285610e2e88888761213a565b7c020000000000000000000000000000000000000000000000000000000017612162565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610eda576000600185019050600060046000838152602001908152602001600020541415610ed8576000548114610ed7578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f42868686600161218d565b505050505050565b600b5481565b600f6020528060005260406000206000915054906101000a900460ff1681565b610f78611f79565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fbe573d6000803e3d6000fd5b50565b610fc9611f79565b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b61101083838360405180602001604052806000815250611c5b565b505050565b61101d611f79565b80600e8190555050565b60128054611034906135c4565b80601f0160208091040260200160405190810160405280929190818152602001828054611060906135c4565b80156110ad5780601f10611082576101008083540402835291602001916110ad565b820191906000526020600020905b81548152906001019060200180831161109057829003601f168201915b505050505081565b606060008251905060008167ffffffffffffffff8111156110d9576110d8612d98565b5b60405190808252806020026020018201604052801561111257816020015b6110ff612a43565b8152602001906001900390816110f75790505b50905060005b82811461116b57611142858281518110611135576111346135f6565b5b6020026020010151611cce565b828281518110611155576111546135f6565b5b6020026020010181905250806001019050611118565b508092505050919050565b601060009054906101000a900460ff1681565b60118054611196906135c4565b80601f01602080910402602001604051908101604052809291908181526020018280546111c2906135c4565b801561120f5780601f106111e45761010080835404028352916020019161120f565b820191906000526020600020905b8154815290600101906020018083116111f257829003601f168201915b505050505081565b600061122282612000565b9050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611297576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112f0611f79565b6112fa6000612193565b565b611304611f79565b806011908051906020019061131a9291906129bd565b5050565b6060600080600061132e8561122f565b905060008167ffffffffffffffff81111561134c5761134b612d98565b5b60405190808252806020026020018201604052801561137a5781602001602082028036833780820191505090505b509050611385612a43565b600061138f611ff7565b90505b83861461145a576113a281612259565b91508160400151156113b35761144f565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146113f357816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561144e5780838780600101985081518110611441576114406135f6565b5b6020026020010181815250505b5b806001019050611392565b508195505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546114a1906135c4565b80601f01602080910402602001604051908101604052809291908181526020018280546114cd906135c4565b801561151a5780601f106114ef5761010080835404028352916020019161151a565b820191906000526020600020905b8154815290600101906020018083116114fd57829003601f168201915b5050505050905090565b606081831061155f576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061156a612284565b9050611574611ff7565b85101561158657611583611ff7565b94505b80841115611592578093505b600061159d8761122f565b9050848610156115c05760008686039050818110156115ba578091505b506115c5565b600090505b60008167ffffffffffffffff8111156115e1576115e0612d98565b5b60405190808252806020026020018201604052801561160f5781602001602082028036833780820191505090505b50905060008214156116275780945050505050611731565b600061163288611cce565b90506000816040015161164757816000015190505b60008990505b88811415801561165d5750848714155b156117235761166b81612259565b925082604001511561167c57611718565b600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff16146116bc57826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611717578084888060010199508151811061170a576117096135f6565b5b6020026020010181815250505b5b80600101905061164d565b508583528296505050505050505b9392505050565b611740611f79565b80600d8190555050565b60026009541415611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613671565b60405180910390fd5b60026009819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd906136dd565b60405180910390fd5b601060009054906101000a900460ff1615611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90613749565b60405180910390fd5b600c548161186333611de8565b61186d9190613798565b11156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061383a565b60405180910390fd5b6000811180156118c05750600d548111155b6118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f6906138a6565b60405180910390fd5b600a548161190b610c0e565b6119159190613798565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613912565b60405180910390fd5b600f600061196261228d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a045780600e546119bd9190613932565b3410156119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f6906139d8565b60405180910390fd5b611ac1565b600e5481600e54611a159190613932565b611a1f91906139f8565b341015611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906139d8565b60405180910390fd5b6001600f6000611a6f61228d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611ad2611acc61228d565b82612295565b600160098190555050565b611ae5611f71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611b57611f71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c04611f71565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c499190612b63565b60405180910390a35050565b600d5481565b611c66848484610c25565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611cc857611c91848484846122b3565b611cc7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611cd6612a43565b611cde612a43565b611ce6611ff7565b831080611cfa5750611cf6612284565b8310155b15611d085780915050611d33565b611d1183612259565b9050806040015115611d265780915050611d33565b611d2f83612413565b9150505b919050565b6060611d4382611f12565b611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990613a9e565b60405180910390fd5b6000611d8c612433565b90506000815111611dac5760405180602001604052806000815250611dda565b80611db6846124c5565b6012604051602001611dca93929190613b8e565b6040516020818303038152906040525b915050919050565b600a5481565b6000611df382612626565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e96611f79565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613c31565b60405180910390fd5b611f0f81612193565b50565b600081611f1d611ff7565b11158015611f2c575060005482105b8015611f6a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611f8161228d565b73ffffffffffffffffffffffffffffffffffffffff16611f9f611468565b73ffffffffffffffffffffffffffffffffffffffff1614611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613c9d565b60405180910390fd5b565b60006001905090565b6000808290508061200f611ff7565b11612097576000548110156120965760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612094575b600081141561208a57600460008360019003935083815260200190815260200160002054905061205f565b80925050506120c9565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861215186868461267d565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612261612a43565b61227d6004600084815260200190815260200160002054612686565b9050919050565b60008054905090565b600033905090565b6122af82826040518060200160405280600081525061273c565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d9611f71565b8786866040518563ffffffff1660e01b81526004016122fb9493929190613d12565b602060405180830381600087803b15801561231557600080fd5b505af192505050801561234657506040513d601f19601f820116820180604052508101906123439190613d73565b60015b6123c0573d8060008114612376576040519150601f19603f3d011682016040523d82523d6000602084013e61237b565b606091505b506000815114156123b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b61241b612a43565b61242c61242783612000565b612686565b9050919050565b606060118054612442906135c4565b80601f016020809104026020016040519081016040528092919081815260200182805461246e906135c4565b80156124bb5780601f10612490576101008083540402835291602001916124bb565b820191906000526020600020905b81548152906001019060200180831161249e57829003601f168201915b5050505050905090565b6060600082141561250d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612621565b600082905060005b6000821461253f57808061252890613da0565b915050600a826125389190613e18565b9150612515565b60008167ffffffffffffffff81111561255b5761255a612d98565b5b6040519080825280601f01601f19166020018201604052801561258d5781602001600182028036833780820191505090505b5090505b6000851461261a576001826125a691906139f8565b9150600a856125b59190613e49565b60306125c19190613798565b60f81b8183815181106125d7576125d66135f6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126139190613e18565b9450612591565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60009392505050565b61268e612a43565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c01000000000000000000000000000000000000000000000000000000008316141581604001901515908115158152505060e882901c816060019062ffffff16908162ffffff1681525050919050565b61274683836127d9565b60008373ffffffffffffffffffffffffffffffffffffffff163b146127d457600080549050600083820390505b61278660008683806001019450866122b3565b6127bc576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106127735781600054146127d157600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612846576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415612881576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61288e6000848385612134565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612905836128f6600086600061213a565b6128ff856129ad565b17612162565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612929578060008190555050506129a8600084838561218d565b505050565b60006001821460e11b9050919050565b8280546129c9906135c4565b90600052602060002090601f0160209004810192826129eb5760008555612a32565b82601f10612a0457805160ff1916838001178555612a32565b82800160010185558215612a32579182015b82811115612a31578251825591602001919060010190612a16565b5b509050612a3f9190612a92565b5090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001600062ffffff1681525090565b5b80821115612aab576000816000905550600101612a93565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612af881612ac3565b8114612b0357600080fd5b50565b600081359050612b1581612aef565b92915050565b600060208284031215612b3157612b30612ab9565b5b6000612b3f84828501612b06565b91505092915050565b60008115159050919050565b612b5d81612b48565b82525050565b6000602082019050612b786000830184612b54565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bb8578082015181840152602081019050612b9d565b83811115612bc7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612be982612b7e565b612bf38185612b89565b9350612c03818560208601612b9a565b612c0c81612bcd565b840191505092915050565b60006020820190508181036000830152612c318184612bde565b905092915050565b6000819050919050565b612c4c81612c39565b8114612c5757600080fd5b50565b600081359050612c6981612c43565b92915050565b600060208284031215612c8557612c84612ab9565b5b6000612c9384828501612c5a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cc782612c9c565b9050919050565b612cd781612cbc565b82525050565b6000602082019050612cf26000830184612cce565b92915050565b612d0181612cbc565b8114612d0c57600080fd5b50565b600081359050612d1e81612cf8565b92915050565b60008060408385031215612d3b57612d3a612ab9565b5b6000612d4985828601612d0f565b9250506020612d5a85828601612c5a565b9150509250929050565b612d6d81612c39565b82525050565b6000602082019050612d886000830184612d64565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dd082612bcd565b810181811067ffffffffffffffff82111715612def57612dee612d98565b5b80604052505050565b6000612e02612aaf565b9050612e0e8282612dc7565b919050565b600067ffffffffffffffff821115612e2e57612e2d612d98565b5b612e3782612bcd565b9050602081019050919050565b82818337600083830152505050565b6000612e66612e6184612e13565b612df8565b905082815260208101848484011115612e8257612e81612d93565b5b612e8d848285612e44565b509392505050565b600082601f830112612eaa57612ea9612d8e565b5b8135612eba848260208601612e53565b91505092915050565b600060208284031215612ed957612ed8612ab9565b5b600082013567ffffffffffffffff811115612ef757612ef6612abe565b5b612f0384828501612e95565b91505092915050565b600080600060608486031215612f2557612f24612ab9565b5b6000612f3386828701612d0f565b9350506020612f4486828701612d0f565b9250506040612f5586828701612c5a565b9150509250925092565b600060208284031215612f7557612f74612ab9565b5b6000612f8384828501612d0f565b91505092915050565b600067ffffffffffffffff821115612fa757612fa6612d98565b5b602082029050602081019050919050565b600080fd5b6000612fd0612fcb84612f8c565b612df8565b90508083825260208201905060208402830185811115612ff357612ff2612fb8565b5b835b8181101561301c57806130088882612c5a565b845260208401935050602081019050612ff5565b5050509392505050565b600082601f83011261303b5761303a612d8e565b5b813561304b848260208601612fbd565b91505092915050565b60006020828403121561306a57613069612ab9565b5b600082013567ffffffffffffffff81111561308857613087612abe565b5b61309484828501613026565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130d281612cbc565b82525050565b600067ffffffffffffffff82169050919050565b6130f5816130d8565b82525050565b61310481612b48565b82525050565b600062ffffff82169050919050565b6131228161310a565b82525050565b60808201600082015161313e60008501826130c9565b50602082015161315160208501826130ec565b50604082015161316460408501826130fb565b5060608201516131776060850182613119565b50505050565b60006131898383613128565b60808301905092915050565b6000602082019050919050565b60006131ad8261309d565b6131b781856130a8565b93506131c2836130b9565b8060005b838110156131f35781516131da888261317d565b97506131e583613195565b9250506001810190506131c6565b5085935050505092915050565b6000602082019050818103600083015261321a81846131a2565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61325781612c39565b82525050565b6000613269838361324e565b60208301905092915050565b6000602082019050919050565b600061328d82613222565b613297818561322d565b93506132a28361323e565b8060005b838110156132d35781516132ba888261325d565b97506132c583613275565b9250506001810190506132a6565b5085935050505092915050565b600060208201905081810360008301526132fa8184613282565b905092915050565b60008060006060848603121561331b5761331a612ab9565b5b600061332986828701612d0f565b935050602061333a86828701612c5a565b925050604061334b86828701612c5a565b9150509250925092565b61335e81612b48565b811461336957600080fd5b50565b60008135905061337b81613355565b92915050565b6000806040838503121561339857613397612ab9565b5b60006133a685828601612d0f565b92505060206133b78582860161336c565b9150509250929050565b600067ffffffffffffffff8211156133dc576133db612d98565b5b6133e582612bcd565b9050602081019050919050565b6000613405613400846133c1565b612df8565b90508281526020810184848401111561342157613420612d93565b5b61342c848285612e44565b509392505050565b600082601f83011261344957613448612d8e565b5b81356134598482602086016133f2565b91505092915050565b6000806000806080858703121561347c5761347b612ab9565b5b600061348a87828801612d0f565b945050602061349b87828801612d0f565b93505060406134ac87828801612c5a565b925050606085013567ffffffffffffffff8111156134cd576134cc612abe565b5b6134d987828801613434565b91505092959194509250565b6080820160008201516134fb60008501826130c9565b50602082015161350e60208501826130ec565b50604082015161352160408501826130fb565b5060608201516135346060850182613119565b50505050565b600060808201905061354f60008301846134e5565b92915050565b6000806040838503121561356c5761356b612ab9565b5b600061357a85828601612d0f565b925050602061358b85828601612d0f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135dc57607f821691505b602082108114156135f0576135ef613595565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061365b601f83612b89565b915061366682613625565b602082019050919050565b6000602082019050818103600083015261368a8161364e565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b60006136c7601e83612b89565b91506136d282613691565b602082019050919050565b600060208201905081810360008301526136f6816136ba565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000613733601783612b89565b915061373e826136fd565b602082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137a382612c39565b91506137ae83612c39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137e3576137e2613769565b5b828201905092915050565b7f5045525f57414c4c45545f4c494d49545f524541434845440000000000000000600082015250565b6000613824601883612b89565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b6000613890601483612b89565b915061389b8261385a565b602082019050919050565b600060208201905081810360008301526138bf81613883565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006138fc601483612b89565b9150613907826138c6565b602082019050919050565b6000602082019050818103600083015261392b816138ef565b9050919050565b600061393d82612c39565b915061394883612c39565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561398157613980613769565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006139c2601383612b89565b91506139cd8261398c565b602082019050919050565b600060208201905081810360008301526139f1816139b5565b9050919050565b6000613a0382612c39565b9150613a0e83612c39565b925082821015613a2157613a20613769565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613a88602f83612b89565b9150613a9382613a2c565b604082019050919050565b60006020820190508181036000830152613ab781613a7b565b9050919050565b600081905092915050565b6000613ad482612b7e565b613ade8185613abe565b9350613aee818560208601612b9a565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613b1c816135c4565b613b268186613abe565b94506001821660008114613b415760018114613b5257613b85565b60ff19831686528186019350613b85565b613b5b85613afa565b60005b83811015613b7d57815481890152600182019150602081019050613b5e565b838801955050505b50505092915050565b6000613b9a8286613ac9565b9150613ba68285613ac9565b9150613bb28284613b0f565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c1b602683612b89565b9150613c2682613bbf565b604082019050919050565b60006020820190508181036000830152613c4a81613c0e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c87602083612b89565b9150613c9282613c51565b602082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ce482613cbd565b613cee8185613cc8565b9350613cfe818560208601612b9a565b613d0781612bcd565b840191505092915050565b6000608082019050613d276000830187612cce565b613d346020830186612cce565b613d416040830185612d64565b8181036060830152613d538184613cd9565b905095945050505050565b600081519050613d6d81612aef565b92915050565b600060208284031215613d8957613d88612ab9565b5b6000613d9784828501613d5e565b91505092915050565b6000613dab82612c39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dde57613ddd613769565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e2382612c39565b9150613e2e83612c39565b925082613e3e57613e3d613de9565b5b828204905092915050565b6000613e5482612c39565b9150613e5f83612c39565b925082613e6f57613e6e613de9565b5b82820690509291505056fea26469706673582212208a2a39bca6e84dd9540d408653995f5a16abfa7c3d806284cc38844089755fd164736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d615a6b6a7642367470615556357a3251317350774c70577155644d705a6f4e4b707472526851427a58674a622f00000000000000000000