608060405234801562000010575f80fd5b506040518060400160405280600a81526020017f546f6b656e426f726a61000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5442520000000000000000000000000000000000000000000000000000000000815250815f90816200008d91906200034c565b5080600190816200009f91906200034c565b5050503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000430565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200016457607f821691505b6020821081036200017a57620001796200011f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001a1565b620001ea8683620001a1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620002346200022e620002288462000202565b6200020b565b62000202565b9050919050565b5f819050919050565b6200024f8362000214565b620002676200025e826200023b565b848454620001ad565b825550505050565b5f90565b6200027d6200026f565b6200028a81848462000244565b505050565b5b81811015620002b157620002a55f8262000273565b60018101905062000290565b5050565b601f8211156200030057620002ca8162000180565b620002d58462000192565b81016020851015620002e5578190505b620002fd620002f48562000192565b8301826200028f565b50505b505050565b5f82821c905092915050565b5f620003225f198460080262000305565b1980831691505092915050565b5f6200033c838362000311565b9150826002028217905092915050565b6200035782620000e8565b67ffffffffffffffff811115620003735762000372620000f2565b5b6200037f82546200014c565b6200038c828285620002b5565b5f60209050601f831160018114620003c2575f8415620003ad578287015190505b620003b985826200032f565b86555062000428565b601f198416620003d28662000180565b5f5b82811015620003fb57848901518255600182019150602085019450602081019050620003d4565b868310156200041b578489015162000417601f89168262000311565b8355505b6001600288020188555050505b505050505050565b6123a6806200043e5f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c806370a0823111610095578063a22cb46511610064578063a22cb465146102a8578063b88d4fde146102c4578063c87b56dd146102e0578063e985e9c514610310576100fe565b806370a08231146102205780638a5a89bd146102505780638da5cb5b1461026c57806395d89b411461028a576100fe565b806323b872dd116100d157806323b872dd1461019c57806342842e0e146101b857806342966c68146101d45780636352211e146101f0576100fe565b806301ffc9a71461010257806306fdde0314610132578063081812fc14610150578063095ea7b314610180575b5f80fd5b61011c600480360381019061011791906118c1565b610340565b6040516101299190611906565b60405180910390f35b61013a6103a0565b60405161014791906119a9565b60405180910390f35b61016a600480360381019061016591906119fc565b61042f565b6040516101779190611a66565b60405180910390f35b61019a60048036038101906101959190611aa9565b61044a565b005b6101b660048036038101906101b19190611ae7565b610460565b005b6101d260048036038101906101cd9190611ae7565b61055f565b005b6101ee60048036038101906101e991906119fc565b61057e565b005b61020a600480360381019061020591906119fc565b61058a565b6040516102179190611a66565b60405180910390f35b61023a60048036038101906102359190611b37565b61059b565b6040516102479190611b71565b60405180910390f35b61026a60048036038101906102659190611cb6565b610651565b005b61027461066f565b6040516102819190611a66565b60405180910390f35b610292610694565b60405161029f91906119a9565b60405180910390f35b6102c260048036038101906102bd9190611d4c565b610724565b005b6102de60048036038101906102d99190611e28565b61073a565b005b6102fa60048036038101906102f591906119fc565b61075f565b60405161030791906119a9565b60405180910390f35b61032a60048036038101906103259190611ea8565b61086a565b6040516103379190611906565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103995750610398826108f8565b5b9050919050565b60605f80546103ae90611f13565b80601f01602080910402602001604051908101604052809291908181526020018280546103da90611f13565b80156104255780601f106103fc57610100808354040283529160200191610425565b820191905f5260205f20905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b5f610439826109d9565b5061044382610a5f565b9050919050565b61045c8282610457610a98565b610a9f565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d0575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104c79190611a66565b60405180910390fd5b5f6104e383836104de610a98565b610ab1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610559578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161055093929190611f43565b60405180910390fd5b50505050565b61057983838360405180602001604052805f81525061073a565b505050565b61058781610cbc565b50565b5f610594826109d9565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361060c575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106039190611a66565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81905061065f8482610d3e565b6106698184610d5b565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546106a390611f13565b80601f01602080910402602001604051908101604052809291908181526020018280546106cf90611f13565b801561071a5780601f106106f15761010080835404028352916020019161071a565b820191905f5260205f20905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b61073661072f610a98565b8383610db5565b5050565b610745848484610460565b610759610750610a98565b85858585610f1e565b50505050565b606061076a826109d9565b505f60065f8481526020019081526020015f20805461078890611f13565b80601f01602080910402602001604051908101604052809291908181526020018280546107b490611f13565b80156107ff5780601f106107d6576101008083540402835291602001916107ff565b820191905f5260205f20905b8154815290600101906020018083116107e257829003601f168201915b505050505090505f61080f6110ca565b90505f815103610823578192505050610865565b5f8251111561085757808260405160200161083f929190611fb2565b60405160208183030381529060405292505050610865565b610860846110e0565b925050505b919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d257506109d182611146565b5b9050919050565b5f806109e4836111af565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a5657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610a4d9190611b71565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610aac83838360016111e8565b505050565b5f80610abc846111af565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610afd57610afc8184866113a7565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b8857610b3c5f855f806111e8565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610c0757600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f610cc85f835f610ab1565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d3a57816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610d319190611b71565b60405180910390fd5b5050565b610d57828260405180602001604052805f81525061146a565b5050565b8060065f8481526020019081526020015f209081610d799190612172565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051610da99190611b71565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e2557816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610e1c9190611a66565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f119190611906565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156110c3578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401610f7c9493929190612293565b6020604051808303815f875af1925050508015610fb757506040513d601f19601f82011682018060405250810190610fb491906122f1565b60015b611038573d805f8114610fe5576040519150601f19603f3d011682016040523d82523d5f602084013e610fea565b606091505b505f81510361103057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110279190611a66565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146110c157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110b89190611a66565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60606110eb826109d9565b505f6110f56110ca565b90505f8151116111135760405180602001604052805f81525061113e565b8061111d8461148d565b60405160200161112e929190611fb2565b6040516020818303038152906040525b915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061122057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611352575f61122f846109d9565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561129957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156112ac57506112aa818461086a565b155b156112ee57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016112e59190611a66565b60405180910390fd5b811561135057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6113b2838383611557565b611465575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361142657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161141d9190611b71565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161145c92919061231c565b60405180910390fd5b505050565b6114748383611617565b61148861147f610a98565b5f858585610f1e565b505050565b60605f600161149b8461170a565b0190505f8167ffffffffffffffff8111156114b9576114b8611b92565b5b6040519080825280601f01601f1916602001820160405280156114eb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561154c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161154157611540612343565b5b0494505f85036114f8575b819350505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561160e57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115cf57506115ce848461086a565b5b8061160d57508273ffffffffffffffffffffffffffffffffffffffff166115f583610a5f565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611687575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161167e9190611a66565b60405180910390fd5b5f61169383835f610ab1565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611705575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016116fc9190611a66565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611766577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161175c5761175b612343565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106117a3576d04ee2d6d415b85acef8100000000838161179957611798612343565b5b0492506020810190505b662386f26fc1000083106117d257662386f26fc1000083816117c8576117c7612343565b5b0492506010810190505b6305f5e10083106117fb576305f5e10083816117f1576117f0612343565b5b0492506008810190505b612710831061182057612710838161181657611815612343565b5b0492506004810190505b60648310611843576064838161183957611838612343565b5b0492506002810190505b600a8310611852576001810190505b80915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118a08161186c565b81146118aa575f80fd5b50565b5f813590506118bb81611897565b92915050565b5f602082840312156118d6576118d5611864565b5b5f6118e3848285016118ad565b91505092915050565b5f8115159050919050565b611900816118ec565b82525050565b5f6020820190506119195f8301846118f7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561195657808201518184015260208101905061193b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61197b8261191f565b6119858185611929565b9350611995818560208601611939565b61199e81611961565b840191505092915050565b5f6020820190508181035f8301526119c18184611971565b905092915050565b5f819050919050565b6119db816119c9565b81146119e5575f80fd5b50565b5f813590506119f6816119d2565b92915050565b5f60208284031215611a1157611a10611864565b5b5f611a1e848285016119e8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a5082611a27565b9050919050565b611a6081611a46565b82525050565b5f602082019050611a795f830184611a57565b92915050565b611a8881611a46565b8114611a92575f80fd5b50565b5f81359050611aa381611a7f565b92915050565b5f8060408385031215611abf57611abe611864565b5b5f611acc85828601611a95565b9250506020611add858286016119e8565b9150509250929050565b5f805f60608486031215611afe57611afd611864565b5b5f611b0b86828701611a95565b9350506020611b1c86828701611a95565b9250506040611b2d868287016119e8565b9150509250925092565b5f60208284031215611b4c57611b4b611864565b5b5f611b5984828501611a95565b91505092915050565b611b6b816119c9565b82525050565b5f602082019050611b845f830184611b62565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611bc882611961565b810181811067ffffffffffffffff82111715611be757611be6611b92565b5b80604052505050565b5f611bf961185b565b9050611c058282611bbf565b919050565b5f67ffffffffffffffff821115611c2457611c23611b92565b5b611c2d82611961565b9050602081019050919050565b828183375f83830152505050565b5f611c5a611c5584611c0a565b611bf0565b905082815260208101848484011115611c7657611c75611b8e565b5b611c81848285611c3a565b509392505050565b5f82601f830112611c9d57611c9c611b8a565b5b8135611cad848260208601611c48565b91505092915050565b5f805f60608486031215611ccd57611ccc611864565b5b5f611cda86828701611a95565b935050602084013567ffffffffffffffff811115611cfb57611cfa611868565b5b611d0786828701611c89565b9250506040611d18868287016119e8565b9150509250925092565b611d2b816118ec565b8114611d35575f80fd5b50565b5f81359050611d4681611d22565b92915050565b5f8060408385031215611d6257611d61611864565b5b5f611d6f85828601611a95565b9250506020611d8085828601611d38565b9150509250929050565b5f67ffffffffffffffff821115611da457611da3611b92565b5b611dad82611961565b9050602081019050919050565b5f611dcc611dc784611d8a565b611bf0565b905082815260208101848484011115611de857611de7611b8e565b5b611df3848285611c3a565b509392505050565b5f82601f830112611e0f57611e0e611b8a565b5b8135611e1f848260208601611dba565b91505092915050565b5f805f8060808587031215611e4057611e3f611864565b5b5f611e4d87828801611a95565b9450506020611e5e87828801611a95565b9350506040611e6f878288016119e8565b925050606085013567ffffffffffffffff811115611e9057611e8f611868565b5b611e9c87828801611dfb565b91505092959194509250565b5f8060408385031215611ebe57611ebd611864565b5b5f611ecb85828601611a95565b9250506020611edc85828601611a95565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f2a57607f821691505b602082108103611f3d57611f3c611ee6565b5b50919050565b5f606082019050611f565f830186611a57565b611f636020830185611b62565b611f706040830184611a57565b949350505050565b5f81905092915050565b5f611f8c8261191f565b611f968185611f78565b9350611fa6818560208601611939565b80840191505092915050565b5f611fbd8285611f82565b9150611fc98284611f82565b91508190509392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026120317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ff6565b61203b8683611ff6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61207661207161206c846119c9565b612053565b6119c9565b9050919050565b5f819050919050565b61208f8361205c565b6120a361209b8261207d565b848454612002565b825550505050565b5f90565b6120b76120ab565b6120c2818484612086565b505050565b5b818110156120e5576120da5f826120af565b6001810190506120c8565b5050565b601f82111561212a576120fb81611fd5565b61210484611fe7565b81016020851015612113578190505b61212761211f85611fe7565b8301826120c7565b50505b505050565b5f82821c905092915050565b5f61214a5f198460080261212f565b1980831691505092915050565b5f612162838361213b565b9150826002028217905092915050565b61217b8261191f565b67ffffffffffffffff81111561219457612193611b92565b5b61219e8254611f13565b6121a98282856120e9565b5f60209050601f8311600181146121da575f84156121c8578287015190505b6121d28582612157565b865550612239565b601f1984166121e886611fd5565b5f5b8281101561220f578489015182556001820191506020850194506020810190506121ea565b8683101561222c5784890151612228601f89168261213b565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f61226582612241565b61226f818561224b565b935061227f818560208601611939565b61228881611961565b840191505092915050565b5f6080820190506122a65f830187611a57565b6122b36020830186611a57565b6122c06040830185611b62565b81810360608301526122d2818461225b565b905095945050505050565b5f815190506122eb81611897565b92915050565b5f6020828403121561230657612305611864565b5b5f612313848285016122dd565b91505092915050565b5f60408201905061232f5f830185611a57565b61233c6020830184611b62565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea2646970667358221220871e889f43ae423d1a4bc85d06ba1cb710f0dec299d45603b87aca7973389b8364736f6c63430008170033