0x608060405234801561000f575f80fd5b5060405180602001604052805f81525061002e8161003460201b60201c565b50610350565b80600290816100439190610281565b5050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806100c257607f821691505b6020821081036100d5576100d461007e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826100fc565b61014186836100fc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61018561018061017b84610159565b610162565b610159565b9050919050565b5f819050919050565b61019e8361016b565b6101b26101aa8261018c565b848454610108565b825550505050565b5f90565b6101c66101ba565b6101d1818484610195565b505050565b5b818110156101f4576101e95f826101be565b6001810190506101d7565b5050565b601f8211156102395761020a816100db565b610213846100ed565b81016020851015610222578190505b61023661022e856100ed565b8301826101d6565b50505b505050565b5f82821c905092915050565b5f6102595f198460080261023e565b1980831691505092915050565b5f610271838361024a565b9150826002028217905092915050565b61028a82610047565b67ffffffffffffffff8111156102a3576102a2610051565b5b6102ad82546100ab565b6102b88282856101f8565b5f60209050601f8311600181146102e9575f84156102d7578287015190505b6102e18582610266565b865550610348565b601f1984166102f7866100db565b5f5b8281101561031e578489015182556001820191506020850194506020810190506102f9565b8683101561033b5784890151610337601f89168261024a565b8355505b6001600288020188555050505b505050505050565b611e218061035d5f395ff3fe608060405234801561000f575f80fd5b5060043610610085575f3560e01c80634e1273f4116100595780634e1273f414610135578063a22cb46514610165578063e985e9c514610181578063f242432a146101b157610085565b8062fdd58e1461008957806301ffc9a7146100b95780630e89341c146100e95780632eb2c2d614610119575b5f80fd5b6100a3600480360381019061009e91906112ef565b6101cd565b6040516100b0919061133c565b60405180910390f35b6100d360048036038101906100ce91906113aa565b610222565b6040516100e091906113ef565b60405180910390f35b61010360048036038101906100fe9190611408565b610303565b60405161011091906114a3565b60405180910390f35b610133600480360381019061012e91906116b3565b610395565b005b61014f600480360381019061014a919061183e565b61043c565b60405161015c919061196b565b60405180910390f35b61017f600480360381019061017a91906119b5565b610543565b005b61019b600480360381019061019691906119f3565b610559565b6040516101a891906113ef565b60405180910390f35b6101cb60048036038101906101c69190611a31565b6105e7565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102ec57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806102fc57506102fb8261068e565b5b9050919050565b60606002805461031290611af1565b80601f016020809104026020016040519081016040528092919081815260200182805461033e90611af1565b80156103895780601f1061036057610100808354040283529160200191610389565b820191905f5260205f20905b81548152906001019060200180831161036c57829003601f168201915b50505050509050919050565b5f61039e6106f7565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156103e357506103e18682610559565b155b156104275780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161041e929190611b30565b60405180910390fd5b61043486868686866106fe565b505050505050565b6060815183511461048857815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260040161047f929190611b57565b60405180910390fd5b5f835167ffffffffffffffff8111156104a4576104a36114c7565b5b6040519080825280602002602001820160405280156104d25781602001602082028036833780820191505090505b5090505f5b84518110156105385761050e6104f682876107f290919063ffffffff16565b610509838761080590919063ffffffff16565b6101cd565b82828151811061052157610520611b7e565b5b6020026020010181815250508060010190506104d7565b508091505092915050565b61055561054e6106f7565b8383610818565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6105f06106f7565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561063557506106338682610559565b155b156106795780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610670929190611b30565b60405180910390fd5b6106868686868686610981565b505050505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361076e575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016107659190611bab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036107de575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016107d59190611bab565b60405180910390fd5b6107eb8585858585610a87565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610888575f6040517fced3e10000000000000000000000000000000000000000000000000000000000815260040161087f9190611bab565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161097491906113ef565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109f1575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016109e89190611bab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610a61575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610a589190611bab565b60405180910390fd5b5f80610a6d8585610b33565b91509150610a7e8787848487610a87565b50505050505050565b610a9385858585610b63565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610b2c575f610acf6106f7565b90506001845103610b1b575f610aee5f8661080590919063ffffffff16565b90505f610b045f8661080590919063ffffffff16565b9050610b14838989858589610ef3565b5050610b2a565b610b298187878787876110a2565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b8051825114610bad57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610ba4929190611b57565b60405180910390fd5b5f610bb66106f7565b90505f5b8351811015610db2575f610bd7828661080590919063ffffffff16565b90505f610bed838661080590919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610d10575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610cbc57888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401610cb39493929190611bc4565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610da557805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d9d9190611c34565b925050819055505b5050806001019050610bba565b506001835103610e6d575f610dd05f8561080590919063ffffffff16565b90505f610de65f8561080590919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051610e5e929190611b57565b60405180910390a45050610eec565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610ee3929190611c67565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561109a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401610f53959493929190611cee565b6020604051808303815f875af1925050508015610f8e57506040513d601f19601f82011682018060405250810190610f8b9190611d5a565b60015b61100f573d805f8114610fbc576040519150601f19603f3d011682016040523d82523d5f602084013e610fc1565b606091505b505f81510361100757846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610ffe9190611bab565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461109857846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161108f9190611bab565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611249578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611102959493929190611d85565b6020604051808303815f875af192505050801561113d57506040513d601f19601f8201168201806040525081019061113a9190611d5a565b60015b6111be573d805f811461116b576040519150601f19603f3d011682016040523d82523d5f602084013e611170565b606091505b505f8151036111b657846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016111ad9190611bab565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461124757846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161123e9190611bab565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61128b82611262565b9050919050565b61129b81611281565b81146112a5575f80fd5b50565b5f813590506112b681611292565b92915050565b5f819050919050565b6112ce816112bc565b81146112d8575f80fd5b50565b5f813590506112e9816112c5565b92915050565b5f80604083850312156113055761130461125a565b5b5f611312858286016112a8565b9250506020611323858286016112db565b9150509250929050565b611336816112bc565b82525050565b5f60208201905061134f5f83018461132d565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61138981611355565b8114611393575f80fd5b50565b5f813590506113a481611380565b92915050565b5f602082840312156113bf576113be61125a565b5b5f6113cc84828501611396565b91505092915050565b5f8115159050919050565b6113e9816113d5565b82525050565b5f6020820190506114025f8301846113e0565b92915050565b5f6020828403121561141d5761141c61125a565b5b5f61142a848285016112db565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61147582611433565b61147f818561143d565b935061148f81856020860161144d565b6114988161145b565b840191505092915050565b5f6020820190508181035f8301526114bb818461146b565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114fd8261145b565b810181811067ffffffffffffffff8211171561151c5761151b6114c7565b5b80604052505050565b5f61152e611251565b905061153a82826114f4565b919050565b5f67ffffffffffffffff821115611559576115586114c7565b5b602082029050602081019050919050565b5f80fd5b5f61158061157b8461153f565b611525565b905080838252602082019050602084028301858111156115a3576115a261156a565b5b835b818110156115cc57806115b888826112db565b8452602084019350506020810190506115a5565b5050509392505050565b5f82601f8301126115ea576115e96114c3565b5b81356115fa84826020860161156e565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115611621576116206114c7565b5b61162a8261145b565b9050602081019050919050565b828183375f83830152505050565b5f61165761165284611607565b611525565b90508281526020810184848401111561167357611672611603565b5b61167e848285611637565b509392505050565b5f82601f83011261169a576116996114c3565b5b81356116aa848260208601611645565b91505092915050565b5f805f805f60a086880312156116cc576116cb61125a565b5b5f6116d9888289016112a8565b95505060206116ea888289016112a8565b945050604086013567ffffffffffffffff81111561170b5761170a61125e565b5b611717888289016115d6565b935050606086013567ffffffffffffffff8111156117385761173761125e565b5b611744888289016115d6565b925050608086013567ffffffffffffffff8111156117655761176461125e565b5b61177188828901611686565b9150509295509295909350565b5f67ffffffffffffffff821115611798576117976114c7565b5b602082029050602081019050919050565b5f6117bb6117b68461177e565b611525565b905080838252602082019050602084028301858111156117de576117dd61156a565b5b835b8181101561180757806117f388826112a8565b8452602084019350506020810190506117e0565b5050509392505050565b5f82601f830112611825576118246114c3565b5b81356118358482602086016117a9565b91505092915050565b5f80604083850312156118545761185361125a565b5b5f83013567ffffffffffffffff8111156118715761187061125e565b5b61187d85828601611811565b925050602083013567ffffffffffffffff81111561189e5761189d61125e565b5b6118aa858286016115d6565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6118e6816112bc565b82525050565b5f6118f783836118dd565b60208301905092915050565b5f602082019050919050565b5f611919826118b4565b61192381856118be565b935061192e836118ce565b805f5b8381101561195e57815161194588826118ec565b975061195083611903565b925050600181019050611931565b5085935050505092915050565b5f6020820190508181035f830152611983818461190f565b905092915050565b611994816113d5565b811461199e575f80fd5b50565b5f813590506119af8161198b565b92915050565b5f80604083850312156119cb576119ca61125a565b5b5f6119d8858286016112a8565b92505060206119e9858286016119a1565b9150509250929050565b5f8060408385031215611a0957611a0861125a565b5b5f611a16858286016112a8565b9250506020611a27858286016112a8565b9150509250929050565b5f805f805f60a08688031215611a4a57611a4961125a565b5b5f611a57888289016112a8565b9550506020611a68888289016112a8565b9450506040611a79888289016112db565b9350506060611a8a888289016112db565b925050608086013567ffffffffffffffff811115611aab57611aaa61125e565b5b611ab788828901611686565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b0857607f821691505b602082108103611b1b57611b1a611ac4565b5b50919050565b611b2a81611281565b82525050565b5f604082019050611b435f830185611b21565b611b506020830184611b21565b9392505050565b5f604082019050611b6a5f83018561132d565b611b77602083018461132d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082019050611bbe5f830184611b21565b92915050565b5f608082019050611bd75f830187611b21565b611be4602083018661132d565b611bf1604083018561132d565b611bfe606083018461132d565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c3e826112bc565b9150611c49836112bc565b9250828201905080821115611c6157611c60611c07565b5b92915050565b5f6040820190508181035f830152611c7f818561190f565b90508181036020830152611c93818461190f565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611cc082611c9c565b611cca8185611ca6565b9350611cda81856020860161144d565b611ce38161145b565b840191505092915050565b5f60a082019050611d015f830188611b21565b611d0e6020830187611b21565b611d1b604083018661132d565b611d28606083018561132d565b8181036080830152611d3a8184611cb6565b90509695505050505050565b5f81519050611d5481611380565b92915050565b5f60208284031215611d6f57611d6e61125a565b5b5f611d7c84828501611d46565b91505092915050565b5f60a082019050611d985f830188611b21565b611da56020830187611b21565b8181036040830152611db7818661190f565b90508181036060830152611dcb818561190f565b90508181036080830152611ddf8184611cb6565b9050969550505050505056fea2646970667358221220bf15b78b5e40e73ea4549b5e4f33832af5f88ab8807b5a0f5b07e9082f0626eb64736f6c634300081a0033