608060405234801562000010575f80fd5b50620000216200013d60201b60201c565b6040518060400160405280600c81526020017f50726f6f66206f662047617900000000000000000000000000000000000000008152506040518060400160405280600381526020017f504f470000000000000000000000000000000000000000000000000000000000815250815f90816200009d91906200046b565b508060019081620000af91906200046b565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000125575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200011c919062000592565b60405180910390fd5b62000136816200014460201b60201c565b50620005ad565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200028357607f821691505b6020821081036200029957620002986200023e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002c0565b620003098683620002c0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003536200034d620003478462000321565b6200032a565b62000321565b9050919050565b5f819050919050565b6200036e8362000333565b620003866200037d826200035a565b848454620002cc565b825550505050565b5f90565b6200039c6200038e565b620003a981848462000363565b505050565b5b81811015620003d057620003c45f8262000392565b600181019050620003af565b5050565b601f8211156200041f57620003e9816200029f565b620003f484620002b1565b8101602085101562000404578190505b6200041c6200041385620002b1565b830182620003ae565b50505b505050565b5f82821c905092915050565b5f620004415f198460080262000424565b1980831691505092915050565b5f6200045b838362000430565b9150826002028217905092915050565b620004768262000207565b67ffffffffffffffff81111562000492576200049162000211565b5b6200049e82546200026b565b620004ab828285620003d4565b5f60209050601f831160018114620004e1575f8415620004cc578287015190505b620004d885826200044e565b86555062000547565b601f198416620004f1866200029f565b5f5b828110156200051a57848901518255600182019150602085019450602081019050620004f3565b868310156200053a578489015162000536601f89168262000430565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200057a826200054f565b9050919050565b6200058c816200056e565b82525050565b5f602082019050620005a75f83018462000581565b92915050565b611e6780620005bb5f395ff3fe608060405234801561000f575f80fd5b506004361061012a575f3560e01c8063715018a6116100ab578063b88d4fde1161006f578063b88d4fde14610318578063c87b56dd14610334578063e985e9c514610364578063f2fde38b14610394578063f6f88fb3146103b05761012a565b8063715018a6146102985780638da5cb5b146102a257806395d89b41146102c0578063a22cb465146102de578063a52b6895146102fa5761012a565b806340d097c3116100f257806340d097c3146101e457806342842e0e1461020057806342966c681461021c5780636352211e1461023857806370a08231146102685761012a565b806301ffc9a71461012e57806306fdde031461015e578063081812fc1461017c578063095ea7b3146101ac57806323b872dd146101c8575b5f80fd5b6101486004803603810190610143919061171a565b6103cc565b604051610155919061175f565b60405180910390f35b6101666104ad565b6040516101739190611802565b60405180910390f35b61019660048036038101906101919190611855565b61053c565b6040516101a391906118bf565b60405180910390f35b6101c660048036038101906101c19190611902565b610557565b005b6101e260048036038101906101dd9190611940565b61056d565b005b6101fe60048036038101906101f99190611990565b6105b2565b005b61021a60048036038101906102159190611940565b6105e2565b005b61023660048036038101906102319190611855565b610601565b005b610252600480360381019061024d9190611855565b610618565b60405161025f91906118bf565b60405180910390f35b610282600480360381019061027d9190611990565b610629565b60405161028f91906119ca565b60405180910390f35b6102a06106df565b005b6102aa6106f2565b6040516102b791906118bf565b60405180910390f35b6102c861071a565b6040516102d59190611802565b60405180910390f35b6102f860048036038101906102f39190611a0d565b6107aa565b005b6103026107c0565b60405161030f91906118bf565b60405180910390f35b610332600480360381019061032d9190611b77565b6107e5565b005b61034e60048036038101906103499190611855565b61082b565b60405161035b9190611802565b60405180910390f35b61037e60048036038101906103799190611bf7565b610846565b60405161038b919061175f565b60405180910390f35b6103ae60048036038101906103a99190611990565b6108d4565b005b6103ca60048036038101906103c59190611990565b610958565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104a657506104a5826109a3565b5b9050919050565b60605f80546104bb90611c62565b80601f01602080910402602001604051908101604052809291908181526020018280546104e790611c62565b80156105325780601f1061050957610100808354040283529160200191610532565b820191905f5260205f20905b81548152906001019060200180831161051557829003601f168201915b5050505050905090565b5f61054682610a0c565b5061055082610a92565b9050919050565b6105698282610564610acb565b610ad2565b5050565b5f6105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490611cdc565b60405180910390fd5b505050565b6105ba610ae4565b5f8173ffffffffffffffffffffffffffffffffffffffff1690506105de8282610b7e565b5050565b6105fc83838360405180602001604052805f8152506107e5565b505050565b610609610ae4565b6106145f825f610b9b565b5050565b5f61062282610a0c565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361069a575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161069191906118bf565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106e7610da6565b6106f05f610e2d565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461072990611c62565b80601f016020809104026020016040519081016040528092919081815260200182805461075590611c62565b80156107a05780601f10610777576101008083540402835291602001916107a0565b820191905f5260205f20905b81548152906001019060200180831161078357829003601f168201915b5050505050905090565b6107bc6107b5610acb565b8383610ef0565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c90611cdc565b60405180910390fd5b50505050565b606061083682610a0c565b5061083f611059565b9050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6108dc610da6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361094c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161094391906118bf565b60405180910390fd5b61095581610e2d565b50565b610960610da6565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f80610a1783611079565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a8957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610a8091906119ca565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610adf83838360016110b2565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7c57610b40610acb565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b7391906118bf565b60405180910390fd5b565b610b97828260405180602001604052805f815250611271565b5050565b5f80610ba684611079565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610be757610be681848661128c565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c7257610c265f855f806110b2565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610cf157600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610dae610acb565b73ffffffffffffffffffffffffffffffffffffffff16610dcc6106f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b57610def610acb565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e2291906118bf565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6057816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610f5791906118bf565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104c919061175f565b60405180910390a3505050565b6060604051806060016040528060358152602001611dfd60359139905090565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110ea57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561121c575f6110f984610a0c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561116357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561117657506111748184610846565b155b156111b857826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016111af91906118bf565b60405180910390fd5b811561121a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61127b838361134f565b6112875f848484611442565b505050565b6112978383836115f4565b61134a575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361130b57806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161130291906119ca565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611341929190611cfa565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113bf575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016113b691906118bf565b60405180910390fd5b5f6113cb83835f610b9b565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461143d575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161143491906118bf565b60405180910390fd5b505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156115ee578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611485610acb565b8685856040518563ffffffff1660e01b81526004016114a79493929190611d73565b6020604051808303815f875af19250505080156114e257506040513d601f19601f820116820180604052508101906114df9190611dd1565b60015b611563573d805f8114611510576040519150601f19603f3d011682016040523d82523d5f602084013e611515565b606091505b505f81510361155b57836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161155291906118bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115ec57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115e391906118bf565b60405180910390fd5b505b50505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116ab57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061166c575061166b8484610846565b5b806116aa57508273ffffffffffffffffffffffffffffffffffffffff1661169283610a92565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116f9816116c5565b8114611703575f80fd5b50565b5f81359050611714816116f0565b92915050565b5f6020828403121561172f5761172e6116bd565b5b5f61173c84828501611706565b91505092915050565b5f8115159050919050565b61175981611745565b82525050565b5f6020820190506117725f830184611750565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156117af578082015181840152602081019050611794565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6117d482611778565b6117de8185611782565b93506117ee818560208601611792565b6117f7816117ba565b840191505092915050565b5f6020820190508181035f83015261181a81846117ca565b905092915050565b5f819050919050565b61183481611822565b811461183e575f80fd5b50565b5f8135905061184f8161182b565b92915050565b5f6020828403121561186a576118696116bd565b5b5f61187784828501611841565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118a982611880565b9050919050565b6118b98161189f565b82525050565b5f6020820190506118d25f8301846118b0565b92915050565b6118e18161189f565b81146118eb575f80fd5b50565b5f813590506118fc816118d8565b92915050565b5f8060408385031215611918576119176116bd565b5b5f611925858286016118ee565b925050602061193685828601611841565b9150509250929050565b5f805f60608486031215611957576119566116bd565b5b5f611964868287016118ee565b9350506020611975868287016118ee565b925050604061198686828701611841565b9150509250925092565b5f602082840312156119a5576119a46116bd565b5b5f6119b2848285016118ee565b91505092915050565b6119c481611822565b82525050565b5f6020820190506119dd5f8301846119bb565b92915050565b6119ec81611745565b81146119f6575f80fd5b50565b5f81359050611a07816119e3565b92915050565b5f8060408385031215611a2357611a226116bd565b5b5f611a30858286016118ee565b9250506020611a41858286016119f9565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611a89826117ba565b810181811067ffffffffffffffff82111715611aa857611aa7611a53565b5b80604052505050565b5f611aba6116b4565b9050611ac68282611a80565b919050565b5f67ffffffffffffffff821115611ae557611ae4611a53565b5b611aee826117ba565b9050602081019050919050565b828183375f83830152505050565b5f611b1b611b1684611acb565b611ab1565b905082815260208101848484011115611b3757611b36611a4f565b5b611b42848285611afb565b509392505050565b5f82601f830112611b5e57611b5d611a4b565b5b8135611b6e848260208601611b09565b91505092915050565b5f805f8060808587031215611b8f57611b8e6116bd565b5b5f611b9c878288016118ee565b9450506020611bad878288016118ee565b9350506040611bbe87828801611841565b925050606085013567ffffffffffffffff811115611bdf57611bde6116c1565b5b611beb87828801611b4a565b91505092959194509250565b5f8060408385031215611c0d57611c0c6116bd565b5b5f611c1a858286016118ee565b9250506020611c2b858286016118ee565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c7957607f821691505b602082108103611c8c57611c8b611c35565b5b50919050565b7f4e494345205452590000000000000000000000000000000000000000000000005f82015250565b5f611cc6600883611782565b9150611cd182611c92565b602082019050919050565b5f6020820190508181035f830152611cf381611cba565b9050919050565b5f604082019050611d0d5f8301856118b0565b611d1a60208301846119bb565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611d4582611d21565b611d4f8185611d2b565b9350611d5f818560208601611792565b611d68816117ba565b840191505092915050565b5f608082019050611d865f8301876118b0565b611d9360208301866118b0565b611da060408301856119bb565b8181036060830152611db28184611d3b565b905095945050505050565b5f81519050611dcb816116f0565b92915050565b5f60208284031215611de657611de56116bd565b5b5f611df384828501611dbd565b9150509291505056fe697066733a2f2f516d6239456b633943374b7a4b344173715063356f5150396453426e6b4e7a676d385774686b6745356872725562a2646970667358221220612d1a885a0dfa5c10e3d1d733b40204a7bf483704ee4b3701054c62ed9ef23d64736f6c63430008140033