608060405234801561000f575f80fd5b50336040518060400160405280600981526020017f52474220546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5247425400000000000000000000000000000000000000000000000000000000815250815f908161008b9190610420565b50806001908161009b9190610420565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610105919061052e565b60405180910390fd5b61011d8161012360201b60201c565b50610547565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061026157607f821691505b6020821081036102745761027361021d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261029b565b6102e0868361029b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61032461031f61031a846102f8565b610301565b6102f8565b9050919050565b5f819050919050565b61033d8361030a565b6103516103498261032b565b8484546102a7565b825550505050565b5f90565b610365610359565b610370818484610334565b505050565b5b81811015610393576103885f8261035d565b600181019050610376565b5050565b601f8211156103d8576103a98161027a565b6103b28461028c565b810160208510156103c1578190505b6103d56103cd8561028c565b830182610375565b50505b505050565b5f82821c905092915050565b5f6103f85f19846008026103dd565b1980831691505092915050565b5f61041083836103e9565b9150826002028217905092915050565b610429826101e6565b67ffffffffffffffff811115610442576104416101f0565b5b61044c825461024a565b610457828285610397565b5f60209050601f831160018114610488575f8415610476578287015190505b6104808582610405565b8655506104e7565b601f1984166104968661027a565b5f5b828110156104bd57848901518255600182019150602085019450602081019050610498565b868310156104da57848901516104d6601f8916826103e9565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610518826104ef565b9050919050565b6105288161050e565b82525050565b5f6020820190506105415f83018461051f565b92915050565b612574806105545f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063715018a6116100a0578063b88d4fde1161006f578063b88d4fde146102c8578063c87b56dd146102e4578063cd279c7c14610314578063e985e9c514610344578063f2fde38b1461037457610114565b8063715018a6146102665780638da5cb5b1461027057806395d89b411461028e578063a22cb465146102ac57610114565b806323b872dd116100e757806323b872dd146101b257806342842e0e146101ce57806342966c68146101ea5780636352211e1461020657806370a082311461023657610114565b806301ffc9a71461011857806306fdde0314610148578063081812fc14610166578063095ea7b314610196575b5f80fd5b610132600480360381019061012d9190611aa9565b610390565b60405161013f9190611aee565b60405180910390f35b6101506103a1565b60405161015d9190611b77565b60405180910390f35b610180600480360381019061017b9190611bca565b610430565b60405161018d9190611c34565b60405180910390f35b6101b060048036038101906101ab9190611c77565b61044b565b005b6101cc60048036038101906101c79190611cb5565b610461565b005b6101e860048036038101906101e39190611cb5565b610560565b005b61020460048036038101906101ff9190611bca565b61057f565b005b610220600480360381019061021b9190611bca565b610595565b60405161022d9190611c34565b60405180910390f35b610250600480360381019061024b9190611d05565b6105a6565b60405161025d9190611d3f565b60405180910390f35b61026e61065c565b005b61027861066f565b6040516102859190611c34565b60405180910390f35b610296610697565b6040516102a39190611b77565b60405180910390f35b6102c660048036038101906102c19190611d82565b610727565b005b6102e260048036038101906102dd9190611eec565b61073d565b005b6102fe60048036038101906102f99190611bca565b610762565b60405161030b9190611b77565b60405180910390f35b61032e6004803603810190610329919061200a565b610774565b60405161033b9190611d3f565b60405180910390f35b61035e60048036038101906103599190612076565b61079b565b60405161036b9190611aee565b60405180910390f35b61038e60048036038101906103899190611d05565b610829565b005b5f61039a826108ad565b9050919050565b60605f80546103af906120e1565b80601f01602080910402602001604051908101604052809291908181526020018280546103db906120e1565b80156104265780601f106103fd57610100808354040283529160200191610426565b820191905f5260205f20905b81548152906001019060200180831161040957829003601f168201915b5050505050905090565b5f61043a8261090d565b5061044482610993565b9050919050565b61045d82826104586109cc565b6109d3565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d1575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104c89190611c34565b60405180910390fd5b5f6104e483836104df6109cc565b6109e5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461055a578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161055193929190612111565b60405180910390fd5b50505050565b61057a83838360405180602001604052805f81525061073d565b505050565b6105915f8261058c6109cc565b6109e5565b5050565b5f61059f8261090d565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610617575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161060e9190611c34565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610664610bf0565b61066d5f610c77565b565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546106a6906120e1565b80601f01602080910402602001604051908101604052809291908181526020018280546106d2906120e1565b801561071d5780601f106106f45761010080835404028352916020019161071d565b820191905f5260205f20905b81548152906001019060200180831161070057829003601f168201915b5050505050905090565b6107396107326109cc565b8383610d3a565b5050565b610748848484610461565b61075c6107536109cc565b85858585610ea3565b50505050565b606061076d8261104f565b9050919050565b5f61077d610bf0565b610787848461115a565b6107918383611177565b8290509392505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610831610bf0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108a1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108989190611c34565b60405180910390fd5b6108aa81610c77565b50565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109065750610905826111d1565b5b9050919050565b5f80610918836112b2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361098a57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109819190611d3f565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6109e083838360016112eb565b505050565b5f806109f0846112b2565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a3157610a308184866114aa565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610abc57610a705f855f806112eb565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b3b57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610bf86109cc565b73ffffffffffffffffffffffffffffffffffffffff16610c1661066f565b73ffffffffffffffffffffffffffffffffffffffff1614610c7557610c396109cc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c6c9190611c34565b60405180910390fd5b565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daa57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610da19190611c34565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e969190611aee565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611048578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401610f019493929190612198565b6020604051808303815f875af1925050508015610f3c57506040513d601f19601f82011682018060405250810190610f3991906121f6565b60015b610fbd573d805f8114610f6a576040519150601f19603f3d011682016040523d82523d5f602084013e610f6f565b606091505b505f815103610fb557836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fac9190611c34565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461104657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161103d9190611c34565b60405180910390fd5b505b5050505050565b606061105a8261090d565b505f60065f8481526020019081526020015f208054611078906120e1565b80601f01602080910402602001604051908101604052809291908181526020018280546110a4906120e1565b80156110ef5780601f106110c6576101008083540402835291602001916110ef565b820191905f5260205f20905b8154815290600101906020018083116110d257829003601f168201915b505050505090505f6110ff61156d565b90505f815103611113578192505050611155565b5f8251111561114757808260405160200161112f92919061225b565b60405160208183030381529060405292505050611155565b61115084611583565b925050505b919050565b611173828260405180602001604052805f8152506115e9565b5050565b8060065f8481526020019081526020015f209081611195919061241b565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516111c59190611d3f565b60405180910390a15050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061129b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806112ab57506112aa8261160c565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061132357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611455575f6113328461090d565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561139c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156113af57506113ad818461079b565b155b156113f157826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016113e89190611c34565b60405180910390fd5b811561145357838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6114b5838383611675565b611568575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361152957806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016115209190611d3f565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161155f9291906124ea565b60405180910390fd5b505050565b606060405180602001604052805f815250905090565b606061158e8261090d565b505f61159861156d565b90505f8151116115b65760405180602001604052805f8152506115e1565b806115c084611735565b6040516020016115d192919061225b565b6040516020818303038152906040525b915050919050565b6115f383836117ff565b6116076115fe6109cc565b5f858585610ea3565b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561172c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116ed57506116ec848461079b565b5b8061172b57508273ffffffffffffffffffffffffffffffffffffffff1661171383610993565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60605f6001611743846118f2565b0190505f8167ffffffffffffffff81111561176157611760611dc8565b5b6040519080825280601f01601f1916602001820160405280156117935781602001600182028036833780820191505090505b5090505f82602001820190505b6001156117f4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816117e9576117e8612511565b5b0494505f85036117a0575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186f575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118669190611c34565b60405180910390fd5b5f61187b83835f6109e5565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118ed575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118e49190611c34565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061194e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161194457611943612511565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061198b576d04ee2d6d415b85acef8100000000838161198157611980612511565b5b0492506020810190505b662386f26fc1000083106119ba57662386f26fc1000083816119b0576119af612511565b5b0492506010810190505b6305f5e10083106119e3576305f5e10083816119d9576119d8612511565b5b0492506008810190505b6127108310611a085761271083816119fe576119fd612511565b5b0492506004810190505b60648310611a2b5760648381611a2157611a20612511565b5b0492506002810190505b600a8310611a3a576001810190505b80915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a8881611a54565b8114611a92575f80fd5b50565b5f81359050611aa381611a7f565b92915050565b5f60208284031215611abe57611abd611a4c565b5b5f611acb84828501611a95565b91505092915050565b5f8115159050919050565b611ae881611ad4565b82525050565b5f602082019050611b015f830184611adf565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611b4982611b07565b611b538185611b11565b9350611b63818560208601611b21565b611b6c81611b2f565b840191505092915050565b5f6020820190508181035f830152611b8f8184611b3f565b905092915050565b5f819050919050565b611ba981611b97565b8114611bb3575f80fd5b50565b5f81359050611bc481611ba0565b92915050565b5f60208284031215611bdf57611bde611a4c565b5b5f611bec84828501611bb6565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c1e82611bf5565b9050919050565b611c2e81611c14565b82525050565b5f602082019050611c475f830184611c25565b92915050565b611c5681611c14565b8114611c60575f80fd5b50565b5f81359050611c7181611c4d565b92915050565b5f8060408385031215611c8d57611c8c611a4c565b5b5f611c9a85828601611c63565b9250506020611cab85828601611bb6565b9150509250929050565b5f805f60608486031215611ccc57611ccb611a4c565b5b5f611cd986828701611c63565b9350506020611cea86828701611c63565b9250506040611cfb86828701611bb6565b9150509250925092565b5f60208284031215611d1a57611d19611a4c565b5b5f611d2784828501611c63565b91505092915050565b611d3981611b97565b82525050565b5f602082019050611d525f830184611d30565b92915050565b611d6181611ad4565b8114611d6b575f80fd5b50565b5f81359050611d7c81611d58565b92915050565b5f8060408385031215611d9857611d97611a4c565b5b5f611da585828601611c63565b9250506020611db685828601611d6e565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611dfe82611b2f565b810181811067ffffffffffffffff82111715611e1d57611e1c611dc8565b5b80604052505050565b5f611e2f611a43565b9050611e3b8282611df5565b919050565b5f67ffffffffffffffff821115611e5a57611e59611dc8565b5b611e6382611b2f565b9050602081019050919050565b828183375f83830152505050565b5f611e90611e8b84611e40565b611e26565b905082815260208101848484011115611eac57611eab611dc4565b5b611eb7848285611e70565b509392505050565b5f82601f830112611ed357611ed2611dc0565b5b8135611ee3848260208601611e7e565b91505092915050565b5f805f8060808587031215611f0457611f03611a4c565b5b5f611f1187828801611c63565b9450506020611f2287828801611c63565b9350506040611f3387828801611bb6565b925050606085013567ffffffffffffffff811115611f5457611f53611a50565b5b611f6087828801611ebf565b91505092959194509250565b5f67ffffffffffffffff821115611f8657611f85611dc8565b5b611f8f82611b2f565b9050602081019050919050565b5f611fae611fa984611f6c565b611e26565b905082815260208101848484011115611fca57611fc9611dc4565b5b611fd5848285611e70565b509392505050565b5f82601f830112611ff157611ff0611dc0565b5b8135612001848260208601611f9c565b91505092915050565b5f805f6060848603121561202157612020611a4c565b5b5f61202e86828701611c63565b935050602061203f86828701611bb6565b925050604084013567ffffffffffffffff8111156120605761205f611a50565b5b61206c86828701611fdd565b9150509250925092565b5f806040838503121561208c5761208b611a4c565b5b5f61209985828601611c63565b92505060206120aa85828601611c63565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806120f857607f821691505b60208210810361210b5761210a6120b4565b5b50919050565b5f6060820190506121245f830186611c25565b6121316020830185611d30565b61213e6040830184611c25565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f61216a82612146565b6121748185612150565b9350612184818560208601611b21565b61218d81611b2f565b840191505092915050565b5f6080820190506121ab5f830187611c25565b6121b86020830186611c25565b6121c56040830185611d30565b81810360608301526121d78184612160565b905095945050505050565b5f815190506121f081611a7f565b92915050565b5f6020828403121561220b5761220a611a4c565b5b5f612218848285016121e2565b91505092915050565b5f81905092915050565b5f61223582611b07565b61223f8185612221565b935061224f818560208601611b21565b80840191505092915050565b5f612266828561222b565b9150612272828461222b565b91508190509392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026122da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261229f565b6122e4868361229f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61231f61231a61231584611b97565b6122fc565b611b97565b9050919050565b5f819050919050565b61233883612305565b61234c61234482612326565b8484546122ab565b825550505050565b5f90565b612360612354565b61236b81848461232f565b505050565b5b8181101561238e576123835f82612358565b600181019050612371565b5050565b601f8211156123d3576123a48161227e565b6123ad84612290565b810160208510156123bc578190505b6123d06123c885612290565b830182612370565b50505b505050565b5f82821c905092915050565b5f6123f35f19846008026123d8565b1980831691505092915050565b5f61240b83836123e4565b9150826002028217905092915050565b61242482611b07565b67ffffffffffffffff81111561243d5761243c611dc8565b5b61244782546120e1565b612452828285612392565b5f60209050601f831160018114612483575f8415612471578287015190505b61247b8582612400565b8655506124e2565b601f1984166124918661227e565b5f5b828110156124b857848901518255600182019150602085019450602081019050612493565b868310156124d557848901516124d1601f8916826123e4565b8355505b6001600288020188555050505b505050505050565b5f6040820190506124fd5f830185611c25565b61250a6020830184611d30565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea2646970667358221220bedd87bbfe6056a8fc8b1c16c976d01c1b52a805b2dc765f29a3d4015e84d03764736f6c634300081a0033