60806040526040518060400160405280600981526020017f444f524b20444f47450000000000000000000000000000000000000000000000815250600590816200004a919062000718565b506040518060400160405280600581526020017f444f524b440000000000000000000000000000000000000000000000000000008152506006908162000091919062000718565b506040518060400160405280600981526020017f313636333838343333000000000000000000000000000000000000000000000081525060099081620000d8919062000718565b50348015620000e657600080fd5b50604051620025d8380380620025d883398181016040528101906200010c919062000869565b6200012c620001206200019860201b60201c565b620001a060201b60201c565b60006b09b18ab5df7180b6b8000000905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200019033826200026460201b60201c565b505062000a53565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cd90620008fc565b60405180910390fd5b620002ea60008383620003d260201b60201c565b8060046000828254620002fe91906200094d565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003b2919062000999565b60405180910390a3620003ce600083836200049960201b60201c565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414ac230856040518263ffffffff1660e01b8152600401620004319190620009c7565b602060405180830381865afa1580156200044f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000475919062000a21565b9050600081156200049257809250600083116200049157600080fd5b5b5050505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200052057607f821691505b602082108103620005365762000535620004d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000561565b620005ac868362000561565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005f9620005f3620005ed84620005c4565b620005ce565b620005c4565b9050919050565b6000819050919050565b6200061583620005d8565b6200062d620006248262000600565b8484546200056e565b825550505050565b600090565b6200064462000635565b620006518184846200060a565b505050565b5b8181101562000679576200066d6000826200063a565b60018101905062000657565b5050565b601f821115620006c85762000692816200053c565b6200069d8462000551565b81016020851015620006ad578190505b620006c5620006bc8562000551565b83018262000656565b50505b505050565b600082821c905092915050565b6000620006ed60001984600802620006cd565b1980831691505092915050565b6000620007088383620006da565b9150826002028217905092915050565b62000723826200049e565b67ffffffffffffffff8111156200073f576200073e620004a9565b5b6200074b825462000507565b620007588282856200067d565b600060209050601f8311600181146200079057600084156200077b578287015190505b620007878582620006fa565b865550620007f7565b601f198416620007a0866200053c565b60005b82811015620007ca57848901518255600182019150602085019450602081019050620007a3565b86831015620007ea5784890151620007e6601f891682620006da565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008318262000804565b9050919050565b620008438162000824565b81146200084f57600080fd5b50565b600081519050620008638162000838565b92915050565b600060208284031215620008825762000881620007ff565b5b6000620008928482850162000852565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008e4601f836200089b565b9150620008f182620008ac565b602082019050919050565b600060208201905081810360008301526200091781620008d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200095a82620005c4565b91506200096783620005c4565b92508282019050808211156200098257620009816200091e565b5b92915050565b6200099381620005c4565b82525050565b6000602082019050620009b0600083018462000988565b92915050565b620009c18162000824565b82525050565b6000602082019050620009de6000830184620009b6565b92915050565b60008115159050919050565b620009fb81620009e4565b811462000a0757600080fd5b50565b60008151905062000a1b81620009f0565b92915050565b60006020828403121562000a3a5762000a39620007ff565b5b600062000a4a8482850162000a0a565b91505092915050565b611b758062000a636000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a9059cbb11610066578063a9059cbb146102b1578063bf40b498146102e1578063dd62ed3e146102fd578063f2fde38b1461032d57610100565b8063715018a61461023b5780638da5cb5b1461024557806395d89b4114610263578063a457c2d71461028157610100565b806323b872dd116100d357806323b872dd1461018d578063313ce567146101bd57806339509351146101db57806370a082311461020b57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd146101535780632148130e14610171575b600080fd5b61010d610349565b60405161011a9190610ec6565b60405180910390f35b61013d60048036038101906101389190610f90565b6103db565b60405161014a9190610feb565b60405180910390f35b61015b6103fe565b6040516101689190611015565b60405180910390f35b61018b60048036038101906101869190611165565b610408565b005b6101a760048036038101906101a291906111ae565b61041b565b6040516101b49190610feb565b60405180910390f35b6101c561044a565b6040516101d2919061121d565b60405180910390f35b6101f560048036038101906101f09190610f90565b610453565b6040516102029190610feb565b60405180910390f35b61022560048036038101906102209190611238565b61048a565b6040516102329190611015565b60405180910390f35b6102436104d3565b005b61024d6104e7565b60405161025a9190611274565b60405180910390f35b61026b610510565b6040516102789190610ec6565b60405180910390f35b61029b60048036038101906102969190610f90565b6105a2565b6040516102a89190610feb565b60405180910390f35b6102cb60048036038101906102c69190610f90565b610619565b6040516102d89190610feb565b60405180910390f35b6102fb60048036038101906102f69190611165565b61063c565b005b6103176004803603810190610312919061128f565b61064f565b6040516103249190611015565b60405180910390f35b61034760048036038101906103429190611238565b6106d6565b005b606060058054610358906112fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610384906112fe565b80156103d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b8154815290600101906020018083116103b457829003601f168201915b5050505050905090565b6000806103e6610759565b90506103f3818585610761565b600191505092915050565b6000600454905090565b806009908161041791906114db565b5050565b600080610426610759565b905061043385828561092a565b61043e8585856109b6565b60019150509392505050565b60006012905090565b60008061045e610759565b905061047f818585610470858961064f565b61047a91906115dc565b610761565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104db610c2f565b6104e56000610cad565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461051f906112fe565b80601f016020809104026020016040519081016040528092919081815260200182805461054b906112fe565b80156105985780601f1061056d57610100808354040283529160200191610598565b820191906000526020600020905b81548152906001019060200180831161057b57829003601f168201915b5050505050905090565b6000806105ad610759565b905060006105bb828661064f565b905083811015610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f790611682565b60405180910390fd5b61060d8286868403610761565b60019250505092915050565b600080610624610759565b90506106318185856109b6565b600191505092915050565b806008908161064b91906114db565b5050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6106de610c2f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074490611714565b60405180910390fd5b61075681610cad565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906117a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083690611838565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161091d9190611015565b60405180910390a3505050565b6000610936848461064f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109b057818110156109a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610999906118a4565b60405180910390fd5b6109af8484848403610761565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90611936565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b906119c8565b60405180910390fd5b610a9f838383610d71565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90611a5a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c169190611015565b60405180910390a3610c29848484610e31565b50505050565b610c37610759565b73ffffffffffffffffffffffffffffffffffffffff16610c556104e7565b73ffffffffffffffffffffffffffffffffffffffff1614610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290611ac6565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414ac230856040518263ffffffff1660e01b8152600401610dce9190611274565b602060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190611b12565b905060008115610e2a5780925060008311610e2957600080fd5b5b5050505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e70578082015181840152602081019050610e55565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e9882610e36565b610ea28185610e41565b9350610eb2818560208601610e52565b610ebb81610e7c565b840191505092915050565b60006020820190508181036000830152610ee08184610e8d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f2782610efc565b9050919050565b610f3781610f1c565b8114610f4257600080fd5b50565b600081359050610f5481610f2e565b92915050565b6000819050919050565b610f6d81610f5a565b8114610f7857600080fd5b50565b600081359050610f8a81610f64565b92915050565b60008060408385031215610fa757610fa6610ef2565b5b6000610fb585828601610f45565b9250506020610fc685828601610f7b565b9150509250929050565b60008115159050919050565b610fe581610fd0565b82525050565b60006020820190506110006000830184610fdc565b92915050565b61100f81610f5a565b82525050565b600060208201905061102a6000830184611006565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61107282610e7c565b810181811067ffffffffffffffff821117156110915761109061103a565b5b80604052505050565b60006110a4610ee8565b90506110b08282611069565b919050565b600067ffffffffffffffff8211156110d0576110cf61103a565b5b6110d982610e7c565b9050602081019050919050565b82818337600083830152505050565b6000611108611103846110b5565b61109a565b90508281526020810184848401111561112457611123611035565b5b61112f8482856110e6565b509392505050565b600082601f83011261114c5761114b611030565b5b813561115c8482602086016110f5565b91505092915050565b60006020828403121561117b5761117a610ef2565b5b600082013567ffffffffffffffff81111561119957611198610ef7565b5b6111a584828501611137565b91505092915050565b6000806000606084860312156111c7576111c6610ef2565b5b60006111d586828701610f45565b93505060206111e686828701610f45565b92505060406111f786828701610f7b565b9150509250925092565b600060ff82169050919050565b61121781611201565b82525050565b6000602082019050611232600083018461120e565b92915050565b60006020828403121561124e5761124d610ef2565b5b600061125c84828501610f45565b91505092915050565b61126e81610f1c565b82525050565b60006020820190506112896000830184611265565b92915050565b600080604083850312156112a6576112a5610ef2565b5b60006112b485828601610f45565b92505060206112c585828601610f45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061131657607f821691505b602082108103611329576113286112cf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026113917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611354565b61139b8683611354565b95508019841693508086168417925050509392505050565b6000819050919050565b60006113d86113d36113ce84610f5a565b6113b3565b610f5a565b9050919050565b6000819050919050565b6113f2836113bd565b6114066113fe826113df565b848454611361565b825550505050565b600090565b61141b61140e565b6114268184846113e9565b505050565b5b8181101561144a5761143f600082611413565b60018101905061142c565b5050565b601f82111561148f576114608161132f565b61146984611344565b81016020851015611478578190505b61148c61148485611344565b83018261142b565b50505b505050565b600082821c905092915050565b60006114b260001984600802611494565b1980831691505092915050565b60006114cb83836114a1565b9150826002028217905092915050565b6114e482610e36565b67ffffffffffffffff8111156114fd576114fc61103a565b5b61150782546112fe565b61151282828561144e565b600060209050601f8311600181146115455760008415611533578287015190505b61153d85826114bf565b8655506115a5565b601f1984166115538661132f565b60005b8281101561157b57848901518255600182019150602085019450602081019050611556565b868310156115985784890151611594601f8916826114a1565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115e782610f5a565b91506115f283610f5a565b925082820190508082111561160a576116096115ad565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061166c602583610e41565b915061167782611610565b604082019050919050565b6000602082019050818103600083015261169b8161165f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006116fe602683610e41565b9150611709826116a2565b604082019050919050565b6000602082019050818103600083015261172d816116f1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611790602483610e41565b915061179b82611734565b604082019050919050565b600060208201905081810360008301526117bf81611783565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611822602283610e41565b915061182d826117c6565b604082019050919050565b6000602082019050818103600083015261185181611815565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061188e601d83610e41565b915061189982611858565b602082019050919050565b600060208201905081810360008301526118bd81611881565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611920602583610e41565b915061192b826118c4565b604082019050919050565b6000602082019050818103600083015261194f81611913565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006119b2602383610e41565b91506119bd82611956565b604082019050919050565b600060208201905081810360008301526119e1816119a5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a44602683610e41565b9150611a4f826119e8565b604082019050919050565b60006020820190508181036000830152611a7381611a37565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ab0602083610e41565b9150611abb82611a7a565b602082019050919050565b60006020820190508181036000830152611adf81611aa3565b9050919050565b611aef81610fd0565b8114611afa57600080fd5b50565b600081519050611b0c81611ae6565b92915050565b600060208284031215611b2857611b27610ef2565b5b6000611b3684828501611afd565b9150509291505056fea2646970667358221220941affb6f54591e093e6ae8e7fa40d18e0453558d81a5c4f053826719cfe5a5d64736f6c634300081200330000000000000000000000007fb6020d6e13757d1b21a85cb34f6d03dac30e0d