0x60806040526001600655348015610014575f80fd5b506040518060400160405280600d81526020017f50656e6775696e20506f776572000000000000000000000000000000000000008152506040518060400160405280600481526020017f50454e4700000000000000000000000000000000000000000000000000000000815250815f908161008f91906102e1565b50806001908161009f91906102e1565b5050506103b0565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061012257607f821691505b602082108103610135576101346100de565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261015c565b6101a1868361015c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e56101e06101db846101b9565b6101c2565b6101b9565b9050919050565b5f819050919050565b6101fe836101cb565b61021261020a826101ec565b848454610168565b825550505050565b5f90565b61022661021a565b6102318184846101f5565b505050565b5b81811015610254576102495f8261021e565b600181019050610237565b5050565b601f8211156102995761026a8161013b565b6102738461014d565b81016020851015610282578190505b61029661028e8561014d565b830182610236565b50505b505050565b5f82821c905092915050565b5f6102b95f198460080261029e565b1980831691505092915050565b5f6102d183836102aa565b9150826002028217905092915050565b6102ea826100a7565b67ffffffffffffffff811115610303576103026100b1565b5b61030d825461010b565b610318828285610258565b5f60209050601f831160018114610349575f8415610337578287015190505b61034185826102c6565b8655506103a8565b601f1984166103578661013b565b5f5b8281101561037e57848901518255600182019150602085019450602081019050610359565b8683101561039b5784890151610397601f8916826102aa565b8355505b6001600288020188555050505b505050505050565b611e33806103bd5f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c80636352211e11610095578063a22cb46511610064578063a22cb46514610296578063b88d4fde146102b2578063c87b56dd146102ce578063e985e9c5146102fe576100fe565b80636352211e146101fa57806370a082311461022a57806375794a3c1461025a57806395d89b4114610278576100fe565b80631249c58b116100d15780631249c58b1461019c57806323b872dd146101a657806340d097c3146101c257806342842e0e146101de576100fe565b806301ffc9a71461010257806306fdde0314610132578063081812fc14610150578063095ea7b314610180575b5f80fd5b61011c6004803603810190610117919061166a565b61032e565b60405161012991906116af565b60405180910390f35b61013a61040f565b6040516101479190611738565b60405180910390f35b61016a6004803603810190610165919061178b565b61049e565b60405161017791906117f5565b60405180910390f35b61019a60048036038101906101959190611838565b6104b9565b005b6101a46104cf565b005b6101c060048036038101906101bb9190611876565b6104f9565b005b6101dc60048036038101906101d791906118c6565b6105f8565b005b6101f860048036038101906101f39190611876565b610623565b005b610214600480360381019061020f919061178b565b610642565b60405161022191906117f5565b60405180910390f35b610244600480360381019061023f91906118c6565b610653565b6040516102519190611900565b60405180910390f35b610262610709565b60405161026f9190611900565b60405180910390f35b61028061070f565b60405161028d9190611738565b60405180910390f35b6102b060048036038101906102ab9190611943565b61079f565b005b6102cc60048036038101906102c79190611aad565b6107b5565b005b6102e860048036038101906102e3919061178b565b6107d2565b6040516102f59190611738565b60405180910390f35b61031860048036038101906103139190611b2d565b610838565b60405161032591906116af565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104085750610407826108c6565b5b9050919050565b60605f805461041d90611b98565b80601f016020809104026020016040519081016040528092919081815260200182805461044990611b98565b80156104945780601f1061046b57610100808354040283529160200191610494565b820191905f5260205f20905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b5f6104a88261092f565b506104b2826109b5565b9050919050565b6104cb82826104c66109ee565b6109f5565b5050565b5f600654905060065f8154809291906104e790611bf5565b91905055506104f63382610a07565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610569575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161056091906117f5565b60405180910390fd5b5f61057c83836105776109ee565b610a24565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105f2578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105e993929190611c3c565b60405180910390fd5b50505050565b5f600654905060065f81548092919061061090611bf5565b919050555061061f8282610a07565b5050565b61063d83838360405180602001604052805f8152506107b5565b505050565b5f61064c8261092f565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106c4575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106bb91906117f5565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60065481565b60606001805461071e90611b98565b80601f016020809104026020016040519081016040528092919081815260200182805461074a90611b98565b80156107955780601f1061076c57610100808354040283529160200191610795565b820191905f5260205f20905b81548152906001019060200180831161077857829003601f168201915b5050505050905090565b6107b16107aa6109ee565b8383610c2f565b5050565b6107c08484846104f9565b6107cc84848484610d98565b50505050565b60606107dd8261092f565b505f6107e7610f4a565b90505f8151116108055760405180602001604052805f815250610830565b8061080f84610f60565b604051602001610820929190611cab565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061093a8361102a565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ac57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109a39190611900565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610a028383836001611063565b505050565b610a20828260405180602001604052805f815250611222565b5050565b5f80610a2f8461102a565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a7057610a6f81848661123d565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610afb57610aaf5f855f80611063565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b7a57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c9f57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610c9691906117f5565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d8b91906116af565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115610f44578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610ddb6109ee565b8685856040518563ffffffff1660e01b8152600401610dfd9493929190611d20565b6020604051808303815f875af1925050508015610e3857506040513d601f19601f82011682018060405250810190610e359190611d7e565b60015b610eb9573d805f8114610e66576040519150601f19603f3d011682016040523d82523d5f602084013e610e6b565b606091505b505f815103610eb157836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610ea891906117f5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f4257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f3991906117f5565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60605f6001610f6e84611300565b0190505f8167ffffffffffffffff811115610f8c57610f8b611989565b5b6040519080825280601f01601f191660200182016040528015610fbe5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561101f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161101457611013611da9565b5b0494505f8503610fcb575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061109b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111cd575f6110aa8461092f565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561111457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561112757506111258184610838565b155b1561116957826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161116091906117f5565b60405180910390fd5b81156111cb57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61122c8383611451565b6112385f848484610d98565b505050565b611248838383611544565b6112fb575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112bc57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112b39190611900565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016112f2929190611dd6565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061135c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161135257611351611da9565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611399576d04ee2d6d415b85acef8100000000838161138f5761138e611da9565b5b0492506020810190505b662386f26fc1000083106113c857662386f26fc1000083816113be576113bd611da9565b5b0492506010810190505b6305f5e10083106113f1576305f5e10083816113e7576113e6611da9565b5b0492506008810190505b612710831061141657612710838161140c5761140b611da9565b5b0492506004810190505b60648310611439576064838161142f5761142e611da9565b5b0492506002810190505b600a8310611448576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c1575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016114b891906117f5565b60405180910390fd5b5f6114cd83835f610a24565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461153f575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161153691906117f5565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156115fb57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115bc57506115bb8484610838565b5b806115fa57508273ffffffffffffffffffffffffffffffffffffffff166115e2836109b5565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61164981611615565b8114611653575f80fd5b50565b5f8135905061166481611640565b92915050565b5f6020828403121561167f5761167e61160d565b5b5f61168c84828501611656565b91505092915050565b5f8115159050919050565b6116a981611695565b82525050565b5f6020820190506116c25f8301846116a0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61170a826116c8565b61171481856116d2565b93506117248185602086016116e2565b61172d816116f0565b840191505092915050565b5f6020820190508181035f8301526117508184611700565b905092915050565b5f819050919050565b61176a81611758565b8114611774575f80fd5b50565b5f8135905061178581611761565b92915050565b5f602082840312156117a05761179f61160d565b5b5f6117ad84828501611777565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117df826117b6565b9050919050565b6117ef816117d5565b82525050565b5f6020820190506118085f8301846117e6565b92915050565b611817816117d5565b8114611821575f80fd5b50565b5f813590506118328161180e565b92915050565b5f806040838503121561184e5761184d61160d565b5b5f61185b85828601611824565b925050602061186c85828601611777565b9150509250929050565b5f805f6060848603121561188d5761188c61160d565b5b5f61189a86828701611824565b93505060206118ab86828701611824565b92505060406118bc86828701611777565b9150509250925092565b5f602082840312156118db576118da61160d565b5b5f6118e884828501611824565b91505092915050565b6118fa81611758565b82525050565b5f6020820190506119135f8301846118f1565b92915050565b61192281611695565b811461192c575f80fd5b50565b5f8135905061193d81611919565b92915050565b5f80604083850312156119595761195861160d565b5b5f61196685828601611824565b92505060206119778582860161192f565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6119bf826116f0565b810181811067ffffffffffffffff821117156119de576119dd611989565b5b80604052505050565b5f6119f0611604565b90506119fc82826119b6565b919050565b5f67ffffffffffffffff821115611a1b57611a1a611989565b5b611a24826116f0565b9050602081019050919050565b828183375f83830152505050565b5f611a51611a4c84611a01565b6119e7565b905082815260208101848484011115611a6d57611a6c611985565b5b611a78848285611a31565b509392505050565b5f82601f830112611a9457611a93611981565b5b8135611aa4848260208601611a3f565b91505092915050565b5f805f8060808587031215611ac557611ac461160d565b5b5f611ad287828801611824565b9450506020611ae387828801611824565b9350506040611af487828801611777565b925050606085013567ffffffffffffffff811115611b1557611b14611611565b5b611b2187828801611a80565b91505092959194509250565b5f8060408385031215611b4357611b4261160d565b5b5f611b5085828601611824565b9250506020611b6185828601611824565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611baf57607f821691505b602082108103611bc257611bc1611b6b565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611bff82611758565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3157611c30611bc8565b5b600182019050919050565b5f606082019050611c4f5f8301866117e6565b611c5c60208301856118f1565b611c6960408301846117e6565b949350505050565b5f81905092915050565b5f611c85826116c8565b611c8f8185611c71565b9350611c9f8185602086016116e2565b80840191505092915050565b5f611cb68285611c7b565b9150611cc28284611c7b565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611cf282611cce565b611cfc8185611cd8565b9350611d0c8185602086016116e2565b611d15816116f0565b840191505092915050565b5f608082019050611d335f8301876117e6565b611d4060208301866117e6565b611d4d60408301856118f1565b8181036060830152611d5f8184611ce8565b905095945050505050565b5f81519050611d7881611640565b92915050565b5f60208284031215611d9357611d9261160d565b5b5f611da084828501611d6a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611de95f8301856117e6565b611df660208301846118f1565b939250505056fea264697066735822122067f8ebe118d599e2b7d3b08f99aaad331d98bbf8271f5f7ca081552a8d31395264736f6c63430008190033