608060405234801561000f575f80fd5b50336040518060400160405280601a81526020017f54656c656772616d2040626c617374526f756c65747465426f740000000000008152506040518060400160405280601d81526020017f68747470733a2f2f742e6d652f626c617374526f756c65747465426f74000000815250816003908161008c9190610721565b50806004908161009c9190610721565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610106919061082f565b60405180910390fd5b61011e8161017e60201b60201c565b505f600560146101000a81548160ff02191690831515021790555060016006819055506101793361015361024160201b60201c565b600a61015f91906109b0565b6305f5e10061016e91906109fa565b61024960201b60201c565b610acb565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b9575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102b0919061082f565b60405180910390fd5b6102ca5f83836102ce60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361031e578060025f8282546103129190610a3b565b925050819055506103ec565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156103a7578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161039e93929190610a7d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610433578060025f828254039250508190555061047d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104da9190610ab2565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061056257607f821691505b6020821081036105755761057461051e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261059c565b6105e1868361059c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61062561062061061b846105f9565b610602565b6105f9565b9050919050565b5f819050919050565b61063e8361060b565b61065261064a8261062c565b8484546105a8565b825550505050565b5f90565b61066661065a565b610671818484610635565b505050565b5b81811015610694576106895f8261065e565b600181019050610677565b5050565b601f8211156106d9576106aa8161057b565b6106b38461058d565b810160208510156106c2578190505b6106d66106ce8561058d565b830182610676565b50505b505050565b5f82821c905092915050565b5f6106f95f19846008026106de565b1980831691505092915050565b5f61071183836106ea565b9150826002028217905092915050565b61072a826104e7565b67ffffffffffffffff811115610743576107426104f1565b5b61074d825461054b565b610758828285610698565b5f60209050601f831160018114610789575f8415610777578287015190505b6107818582610706565b8655506107e8565b601f1984166107978661057b565b5f5b828110156107be57848901518255600182019150602085019450602081019050610799565b868310156107db57848901516107d7601f8916826106ea565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610819826107f0565b9050919050565b6108298161080f565b82525050565b5f6020820190506108425f830184610820565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108ca578086048111156108a6576108a5610848565b5b60018516156108b55780820291505b80810290506108c385610875565b945061088a565b94509492505050565b5f826108e2576001905061099d565b816108ef575f905061099d565b8160018114610905576002811461090f5761093e565b600191505061099d565b60ff84111561092157610920610848565b5b8360020a91508482111561093857610937610848565b5b5061099d565b5060208310610133831016604e8410600b84101617156109735782820a90508381111561096e5761096d610848565b5b61099d565b6109808484846001610881565b9250905081840481111561099757610996610848565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6109ba826105f9565b91506109c5836109a4565b92506109f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108d3565b905092915050565b5f610a04826105f9565b9150610a0f836105f9565b9250828202610a1d816105f9565b91508282048414831517610a3457610a33610848565b5b5092915050565b5f610a45826105f9565b9150610a50836105f9565b9250828201905080821115610a6857610a67610848565b5b92915050565b610a77816105f9565b82525050565b5f606082019050610a905f830186610820565b610a9d6020830185610a6e565b610aaa6040830184610a6e565b949350505050565b5f602082019050610ac55f830184610a6e565b92915050565b611e6b80610ad85f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c806370a08231116100dc5780638980f11f11610095578063a9059cbb1161006f578063a9059cbb146103c1578063dd62ed3e146103f1578063f2fde38b14610421578063f9f92be41461043d57610171565b80638980f11f146103695780638da5cb5b1461038557806395d89b41146103a357610171565b806370a08231146102d1578063715018a614610301578063777dc9b01461030b57806379cc679014610327578063819d4cc6146103435780638456cb591461035f57610171565b80633f4ba83a1161012e5780633f4ba83a14610239578063423f6cef1461024357806342966c681461025f57806344337ea11461027b578063537df3b6146102975780635c975abb146102b357610171565b80630614117a1461017557806306fdde031461017f578063095ea7b31461019d57806318160ddd146101cd57806323b872dd146101eb578063313ce5671461021b575b5f80fd5b61017d61046d565b005b6101876104c2565b60405161019491906116db565b60405180910390f35b6101b760048036038101906101b29190611790565b610552565b6040516101c491906117e8565b60405180910390f35b6101d5610574565b6040516101e29190611810565b60405180910390f35b61020560048036038101906102009190611829565b61057d565b60405161021291906117e8565b60405180910390f35b6102236105ab565b6040516102309190611894565b60405180910390f35b6102416105b3565b005b61025d60048036038101906102589190611790565b6105c5565b005b610279600480360381019061027491906118ad565b6105ec565b005b610295600480360381019061029091906118d8565b610647565b005b6102b160048036038101906102ac91906118d8565b6106f6565b005b6102bb6107a3565b6040516102c891906117e8565b60405180910390f35b6102eb60048036038101906102e691906118d8565b6107b9565b6040516102f89190611810565b60405180910390f35b6103096107fe565b005b61032560048036038101906103209190611964565b610811565b005b610341600480360381019061033c9190611790565b6108e5565b005b61035d60048036038101906103589190611790565b610949565b005b610367610a14565b005b610383600480360381019061037e9190611790565b610a26565b005b61038d610b71565b60405161039a91906119f7565b60405180910390f35b6103ab610b99565b6040516103b891906116db565b60405180910390f35b6103db60048036038101906103d69190611790565b610c29565b6040516103e891906117e8565b60405180910390f35b61040b60048036038101906104069190611a10565b610c4b565b6040516104189190611810565b60405180910390f35b61043b600480360381019061043691906118d8565b610ccd565b005b610457600480360381019061045291906118d8565b610d51565b60405161046491906117e8565b60405180910390f35b610475610d6e565b61047d610b71565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156104bf573d5f803e3d5ffd5b50565b6060600380546104d190611a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546104fd90611a7b565b80156105485780601f1061051f57610100808354040283529160200191610548565b820191905f5260205f20905b81548152906001019060200180831161052b57829003601f168201915b5050505050905090565b5f8061055c610df5565b9050610569818585610dfc565b600191505092915050565b5f600254905090565b5f80610587610df5565b9050610594858285610e0e565b61059f858585610ea0565b60019150509392505050565b5f6012905090565b6105bb610d6e565b6105c3610f90565b565b6105cd610ff2565b6105d5611041565b6105e0338383610ea0565b6105e861108b565b5050565b6105f63382611095565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68260405161063c9190611810565b60405180910390a250565b61064f610d6e565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac60016040516106eb91906117e8565b60405180910390a250565b6106fe610d6e565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac5f60405161079891906117e8565b60405180910390a250565b5f600560149054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610806610d6e565b61080f5f611114565b565b610819610d6e565b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a3061083e610b71565b878787876040518763ffffffff1660e01b815260040161086396959493929190611af5565b5f604051808303815f87803b15801561087a575f80fd5b505af115801561088c573d5f803e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff167ff0e12da6b257be18ce026650cff8b178975c77440ae67662ac380d78d784ffaa856040516108d69190611810565b60405180910390a25050505050565b6108ed610d6e565b6108f78282611095565b8173ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68260405161093d9190611810565b60405180910390a25050565b610951610d6e565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e30610976610b71565b846040518463ffffffff1660e01b815260040161099593929190611b4f565b5f604051808303815f87803b1580156109ac575f80fd5b505af11580156109be573d5f803e3d5ffd5b505050508173ffffffffffffffffffffffffffffffffffffffff167ff0e12da6b257be18ce026650cff8b178975c77440ae67662ac380d78d784ffaa82604051610a089190611810565b60405180910390a25050565b610a1c610d6e565b610a246111d7565b565b610a2e610d6e565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390611bce565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610ac0610b71565b836040518363ffffffff1660e01b8152600401610ade929190611bec565b6020604051808303815f875af1158015610afa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1e9190611c3d565b508173ffffffffffffffffffffffffffffffffffffffff167f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e15799982604051610b659190611810565b60405180910390a25050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ba890611a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd490611a7b565b8015610c1f5780601f10610bf657610100808354040283529160200191610c1f565b820191905f5260205f20905b815481529060010190602001808311610c0257829003601f168201915b5050505050905090565b5f80610c33610df5565b9050610c40818585610ea0565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610cd5610d6e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d45575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610d3c91906119f7565b60405180910390fd5b610d4e81611114565b50565b6007602052805f5260405f205f915054906101000a900460ff1681565b610d76610df5565b73ffffffffffffffffffffffffffffffffffffffff16610d94610b71565b73ffffffffffffffffffffffffffffffffffffffff1614610df357610db7610df5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610dea91906119f7565b60405180910390fd5b565b5f33905090565b610e09838383600161123a565b505050565b5f610e198484610c4b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e9a5781811015610e8b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e8293929190611c68565b60405180910390fd5b610e9984848484035f61123a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f10575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f0791906119f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f80575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f7791906119f7565b60405180910390fd5b610f8b838383611409565b505050565b610f98611622565b5f600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610fdb610df5565b604051610fe891906119f7565b60405180910390a1565b600260065403611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90611ce7565b60405180910390fd5b6002600681905550565b6110496107a3565b15611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090611d4f565b60405180910390fd5b565b6001600681905550565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611105575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016110fc91906119f7565b60405180910390fd5b611110825f83611409565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6111df611041565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611223610df5565b60405161123091906119f7565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112aa575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016112a191906119f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361131a575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161131191906119f7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611403578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113fa9190611810565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611459578060025f82825461144d9190611d9a565b92505081905550611527565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156114e2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016114d993929190611c68565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361156e578060025f82825403925050819055506115b8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116159190611810565b60405180910390a3505050565b61162a6107a3565b611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090611e17565b60405180910390fd5b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6116ad8261166b565b6116b78185611675565b93506116c7818560208601611685565b6116d081611693565b840191505092915050565b5f6020820190508181035f8301526116f381846116a3565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61172c82611703565b9050919050565b61173c81611722565b8114611746575f80fd5b50565b5f8135905061175781611733565b92915050565b5f819050919050565b61176f8161175d565b8114611779575f80fd5b50565b5f8135905061178a81611766565b92915050565b5f80604083850312156117a6576117a56116fb565b5b5f6117b385828601611749565b92505060206117c48582860161177c565b9150509250929050565b5f8115159050919050565b6117e2816117ce565b82525050565b5f6020820190506117fb5f8301846117d9565b92915050565b61180a8161175d565b82525050565b5f6020820190506118235f830184611801565b92915050565b5f805f606084860312156118405761183f6116fb565b5b5f61184d86828701611749565b935050602061185e86828701611749565b925050604061186f8682870161177c565b9150509250925092565b5f60ff82169050919050565b61188e81611879565b82525050565b5f6020820190506118a75f830184611885565b92915050565b5f602082840312156118c2576118c16116fb565b5b5f6118cf8482850161177c565b91505092915050565b5f602082840312156118ed576118ec6116fb565b5b5f6118fa84828501611749565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261192457611923611903565b5b8235905067ffffffffffffffff81111561194157611940611907565b5b60208301915083600182028301111561195d5761195c61190b565b5b9250929050565b5f805f805f6080868803121561197d5761197c6116fb565b5b5f61198a88828901611749565b955050602061199b8882890161177c565b94505060406119ac8882890161177c565b935050606086013567ffffffffffffffff8111156119cd576119cc6116ff565b5b6119d98882890161190f565b92509250509295509295909350565b6119f181611722565b82525050565b5f602082019050611a0a5f8301846119e8565b92915050565b5f8060408385031215611a2657611a256116fb565b5b5f611a3385828601611749565b9250506020611a4485828601611749565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a9257607f821691505b602082108103611aa557611aa4611a4e565b5b50919050565b5f82825260208201905092915050565b828183375f83830152505050565b5f611ad48385611aab565b9350611ae1838584611abb565b611aea83611693565b840190509392505050565b5f60a082019050611b085f8301896119e8565b611b1560208301886119e8565b611b226040830187611801565b611b2f6060830186611801565b8181036080830152611b42818486611ac9565b9050979650505050505050565b5f606082019050611b625f8301866119e8565b611b6f60208301856119e8565b611b7c6040830184611801565b949350505050565b7f43616e6e6f74207265636f766572206f776e20746f6b656e73000000000000005f82015250565b5f611bb8601983611675565b9150611bc382611b84565b602082019050919050565b5f6020820190508181035f830152611be581611bac565b9050919050565b5f604082019050611bff5f8301856119e8565b611c0c6020830184611801565b9392505050565b611c1c816117ce565b8114611c26575f80fd5b50565b5f81519050611c3781611c13565b92915050565b5f60208284031215611c5257611c516116fb565b5b5f611c5f84828501611c29565b91505092915050565b5f606082019050611c7b5f8301866119e8565b611c886020830185611801565b611c956040830184611801565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f611cd1601f83611675565b9150611cdc82611c9d565b602082019050919050565b5f6020820190508181035f830152611cfe81611cc5565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f611d39601083611675565b9150611d4482611d05565b602082019050919050565b5f6020820190508181035f830152611d6681611d2d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611da48261175d565b9150611daf8361175d565b9250828201905080821115611dc757611dc6611d6d565b5b92915050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f611e01601483611675565b9150611e0c82611dcd565b602082019050919050565b5f6020820190508181035f830152611e2e81611df5565b905091905056fea2646970667358221220fc696292d4088838a03154a1547a77cd13593621368aed611b7a1645f6994d8964736f6c634300081a0033