0x60806040523480156200001157600080fd5b506040518060400160405280600681526020017f4861726f6c6400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4841524f4c44000000000000000000000000000000000000000000000000000081525081600090816200008f91906200051d565b508060019081620000a191906200051d565b5050506000600c60006101000a81548160ff021916908315150217905550620000d46000801b336200013e60201b60201c565b620001067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336200013e60201b60201c565b620001387f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200013e60201b60201c565b62000604565b6200015082826200023060201b60201c565b6200022c576001600b600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001d16200029b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000600b600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200032557607f821691505b6020821081036200033b576200033a620002dd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000366565b620003b1868362000366565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003fe620003f8620003f284620003c9565b620003d3565b620003c9565b9050919050565b6000819050919050565b6200041a83620003dd565b62000432620004298262000405565b84845462000373565b825550505050565b600090565b620004496200043a565b620004568184846200040f565b505050565b5b818110156200047e57620004726000826200043f565b6001810190506200045c565b5050565b601f821115620004cd57620004978162000341565b620004a28462000356565b81016020851015620004b2578190505b620004ca620004c18562000356565b8301826200045b565b50505b505050565b600082821c905092915050565b6000620004f260001984600802620004d2565b1980831691505092915050565b60006200050d8383620004df565b9150826002028217905092915050565b6200052882620002a3565b67ffffffffffffffff811115620005445762000543620002ae565b5b6200055082546200030c565b6200055d82828562000482565b600060209050601f83116001811462000595576000841562000580578287015190505b6200058c8582620004ff565b865550620005fc565b601f198416620005a58662000341565b60005b82811015620005cf57848901518255600182019150602085019450602081019050620005a8565b86831015620005ef5784890151620005eb601f891682620004df565b8355505b6001600288020188555050505b505050505050565b6146cc80620006146000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635c975abb11610104578063a22cb465116100a2578063d539139311610071578063d539139314610551578063d547741f1461056f578063e63ab1e91461058b578063e985e9c5146105a9576101da565b8063a22cb465146104cd578063b88d4fde146104e9578063c87b56dd14610505578063d204c45e14610535576101da565b80638456cb59116100de5780638456cb591461045757806391d148541461046157806395d89b4114610491578063a217fddf146104af576101da565b80635c975abb146103d95780636352211e146103f757806370a0823114610427576101da565b8063248a9ca31161017c5780633f4ba83a1161014b5780633f4ba83a1461036757806342842e0e1461037157806342966c681461038d5780634f6ccce7146103a9576101da565b8063248a9ca3146102cf5780632f2ff15d146102ff5780632f745c591461031b57806336568abe1461034b576101da565b8063095ea7b3116101b8578063095ea7b31461025d578063162094c41461027957806318160ddd1461029557806323b872dd146102b3576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612ed4565b6105d9565b6040516102069190612f1c565b60405180910390f35b6102176105eb565b6040516102249190612fc7565b60405180910390f35b6102476004803603810190610242919061301f565b61067d565b604051610254919061308d565b60405180910390f35b610277600480360381019061027291906130d4565b6106c3565b005b610293600480360381019061028e9190613249565b6107da565b005b61029d610813565b6040516102aa91906132b4565b60405180910390f35b6102cd60048036038101906102c891906132cf565b610820565b005b6102e960048036038101906102e49190613358565b610880565b6040516102f69190613394565b60405180910390f35b610319600480360381019061031491906133af565b6108a0565b005b610335600480360381019061033091906130d4565b6108c1565b60405161034291906132b4565b60405180910390f35b610365600480360381019061036091906133af565b610966565b005b61036f6109e9565b005b61038b600480360381019061038691906132cf565b610a1e565b005b6103a760048036038101906103a2919061301f565b610a3e565b005b6103c360048036038101906103be919061301f565b610a9a565b6040516103d091906132b4565b60405180910390f35b6103e1610b0b565b6040516103ee9190612f1c565b60405180910390f35b610411600480360381019061040c919061301f565b610b22565b60405161041e919061308d565b60405180910390f35b610441600480360381019061043c91906133ef565b610ba8565b60405161044e91906132b4565b60405180910390f35b61045f610c5f565b005b61047b600480360381019061047691906133af565b610c94565b6040516104889190612f1c565b60405180910390f35b610499610cff565b6040516104a69190612fc7565b60405180910390f35b6104b7610d91565b6040516104c49190613394565b60405180910390f35b6104e760048036038101906104e29190613448565b610d98565b005b61050360048036038101906104fe9190613529565b610dae565b005b61051f600480360381019061051a919061301f565b610e10565b60405161052c9190612fc7565b60405180910390f35b61054f600480360381019061054a91906135ac565b610e22565b005b610559610e7e565b6040516105669190613394565b60405180910390f35b610589600480360381019061058491906133af565b610ea2565b005b610593610ec3565b6040516105a09190613394565b60405180910390f35b6105c360048036038101906105be9190613608565b610ee7565b6040516105d09190612f1c565b60405180910390f35b60006105e482610f7b565b9050919050565b6060600080546105fa90613677565b80601f016020809104026020016040519081016040528092919081815260200182805461062690613677565b80156106735780601f1061064857610100808354040283529160200191610673565b820191906000526020600020905b81548152906001019060200180831161065657829003601f168201915b5050505050905090565b600061068882610ff5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ce82610b22565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107359061371a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075d611040565b73ffffffffffffffffffffffffffffffffffffffff16148061078c575061078b81610786611040565b610ee7565b5b6107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c2906137ac565b60405180910390fd5b6107d58383611048565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661080481611101565b61080e8383611115565b505050565b6000600880549050905090565b61083161082b611040565b826111b9565b610870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108679061383e565b60405180910390fd5b61087b83838361124e565b505050565b6000600b6000838152602001908152602001600020600101549050919050565b6108a982610880565b6108b281611101565b6108bc8383611547565b505050565b60006108cc83610ba8565b821061090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610904906138d0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61096e611040565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290613962565b60405180910390fd5b6109e58282611628565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1381611101565b610a1b61170a565b50565b610a3983838360405180602001604052806000815250610dae565b505050565b610a4f610a49611040565b826111b9565b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a859061383e565b60405180910390fd5b610a978161176d565b50565b6000610aa4610813565b8210610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc906139f4565b60405180910390fd5b60088281548110610af957610af8613a14565b5b90600052602060002001549050919050565b6000600c60009054906101000a900460ff16905090565b600080610b2e83611779565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690613a8f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613b21565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c8981611101565b610c916117b6565b50565b6000600b600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060018054610d0e90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90613677565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000801b81565b610daa610da3611040565b8383611819565b5050565b610dbf610db9611040565b836111b9565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df59061383e565b60405180910390fd5b610e0a84848484611985565b50505050565b6060610e1b826119e1565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610e4c81611101565b6000610e58600d611af3565b9050610e64600d611b01565b610e6e8482611b17565b610e788184611115565b50505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610eab82610880565b610eb481611101565b610ebe8383611628565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fee5750610fed82611b35565b5b9050919050565b610ffe81611b96565b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490613a8f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166110bb83610b22565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6111128161110d611040565b611bd7565b50565b61111e82611b96565b61115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613bb3565b60405180910390fd5b80600a6000848152602001908152602001600020908161117d9190613d7f565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516111ad91906132b4565b60405180910390a15050565b6000806111c583610b22565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061120757506112068185610ee7565b5b8061124557508373ffffffffffffffffffffffffffffffffffffffff1661122d8461067d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661126e82610b22565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90613ec3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613f55565b60405180910390fd5b6113408383836001611c5c565b8273ffffffffffffffffffffffffffffffffffffffff1661136082610b22565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90613ec3565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115428383836001611c76565b505050565b6115518282610c94565b611624576001600b600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506115c9611040565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116328282610c94565b15611706576000600b600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116ab611040565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611712611c7c565b6000600c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611756611040565b604051611763919061308d565b60405180910390a1565b61177681611cc5565b50565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6117be611d18565b6001600c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611802611040565b60405161180f919061308d565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90613fc1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119789190612f1c565b60405180910390a3505050565b61199084848461124e565b61199c84848484611d62565b6119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290614053565b60405180910390fd5b50505050565b60606119ec82610ff5565b6000600a60008481526020019081526020016000208054611a0c90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3890613677565b8015611a855780601f10611a5a57610100808354040283529160200191611a85565b820191906000526020600020905b815481529060010190602001808311611a6857829003601f168201915b505050505090506000611a96611ee9565b90506000815103611aab578192505050611aee565b600082511115611ae0578082604051602001611ac89291906140af565b60405160208183030381529060405292505050611aee565b611ae984611f00565b925050505b919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611b31828260405180602001604052806000815250611f68565b5050565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b8f5750611b8e82611fc3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16611bb883611779565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611be18282610c94565b611c5857611bee8161203d565b611bfc8360001c602061206a565b604051602001611c0d92919061416b565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f9190612fc7565b60405180910390fd5b5050565b611c64611d18565b611c70848484846122a6565b50505050565b50505050565b611c84610b0b565b611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba906141f1565b60405180910390fd5b565b611cce81612404565b6000600a60008381526020019081526020016000208054611cee90613677565b905014611d1557600a60008281526020019081526020016000206000611d149190612e0b565b5b50565b611d20610b0b565b15611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d579061425d565b60405180910390fd5b565b6000611d838473ffffffffffffffffffffffffffffffffffffffff16612552565b15611edc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611dac611040565b8786866040518563ffffffff1660e01b8152600401611dce94939291906142d2565b6020604051808303816000875af1925050508015611e0a57506040513d601f19601f82011682018060405250810190611e079190614333565b60015b611e8c573d8060008114611e3a576040519150601f19603f3d011682016040523d82523d6000602084013e611e3f565b606091505b506000815103611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90614053565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ee1565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060611f0b82610ff5565b6000611f15611ee9565b90506000815111611f355760405180602001604052806000815250611f60565b80611f3f84612575565b604051602001611f509291906140af565b6040516020818303038152906040525b915050919050565b611f728383612643565b611f7f6000848484611d62565b611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614053565b60405180910390fd5b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612036575061203582612860565b5b9050919050565b60606120638273ffffffffffffffffffffffffffffffffffffffff16601460ff1661206a565b9050919050565b60606000600283600261207d919061438f565b61208791906143d1565b67ffffffffffffffff8111156120a05761209f61311e565b5b6040519080825280601f01601f1916602001820160405280156120d25781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061210a57612109613a14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061216e5761216d613a14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026121ae919061438f565b6121b891906143d1565b90505b6001811115612258577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106121fa576121f9613a14565b5b1a60f81b82828151811061221157612210613a14565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061225190614405565b90506121bb565b506000841461229c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122939061447a565b60405180910390fd5b8091505092915050565b6122b284848484612942565b60018111156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed9061450c565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361233d5761233881612948565b61237c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461237b5761237a8582612991565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123be576123b981612afe565b6123fd565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146123fc576123fb8482612bcf565b5b5b5050505050565b600061240f82610b22565b905061241f816000846001611c5c565b61242882610b22565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461254e816000846001611c76565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000600161258484612c4e565b01905060008167ffffffffffffffff8111156125a3576125a261311e565b5b6040519080825280601f01601f1916602001820160405280156125d55781602001600182028036833780820191505090505b509050600082602001820190505b600115612638578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161262c5761262b61452c565b5b049450600085036125e3575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a9906145a7565b60405180910390fd5b6126bb81611b96565b156126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614613565b60405180910390fd5b612709600083836001611c5c565b61271281611b96565b15612752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274990614613565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461285c600083836001611c76565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061292b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061293b575061293a82612da1565b5b9050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161299e84610ba8565b6129a89190614633565b9050600060076000848152602001908152602001600020549050818114612a8d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b129190614633565b9050600060096000848152602001908152602001600020549050600060088381548110612b4257612b41613a14565b5b906000526020600020015490508060088381548110612b6457612b63613a14565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bb357612bb2614667565b5b6001900381819060005260206000200160009055905550505050565b6000612bda83610ba8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612cac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ca257612ca161452c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612ce9576d04ee2d6d415b85acef81000000008381612cdf57612cde61452c565b5b0492506020810190505b662386f26fc100008310612d1857662386f26fc100008381612d0e57612d0d61452c565b5b0492506010810190505b6305f5e1008310612d41576305f5e1008381612d3757612d3661452c565b5b0492506008810190505b6127108310612d66576127108381612d5c57612d5b61452c565b5b0492506004810190505b60648310612d895760648381612d7f57612d7e61452c565b5b0492506002810190505b600a8310612d98576001810190505b80915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b508054612e1790613677565b6000825580601f10612e295750612e48565b601f016020900490600052602060002090810190612e479190612e4b565b5b50565b5b80821115612e64576000816000905550600101612e4c565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612eb181612e7c565b8114612ebc57600080fd5b50565b600081359050612ece81612ea8565b92915050565b600060208284031215612eea57612ee9612e72565b5b6000612ef884828501612ebf565b91505092915050565b60008115159050919050565b612f1681612f01565b82525050565b6000602082019050612f316000830184612f0d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f71578082015181840152602081019050612f56565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f9982612f37565b612fa38185612f42565b9350612fb3818560208601612f53565b612fbc81612f7d565b840191505092915050565b60006020820190508181036000830152612fe18184612f8e565b905092915050565b6000819050919050565b612ffc81612fe9565b811461300757600080fd5b50565b60008135905061301981612ff3565b92915050565b60006020828403121561303557613034612e72565b5b60006130438482850161300a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130778261304c565b9050919050565b6130878161306c565b82525050565b60006020820190506130a2600083018461307e565b92915050565b6130b18161306c565b81146130bc57600080fd5b50565b6000813590506130ce816130a8565b92915050565b600080604083850312156130eb576130ea612e72565b5b60006130f9858286016130bf565b925050602061310a8582860161300a565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315682612f7d565b810181811067ffffffffffffffff821117156131755761317461311e565b5b80604052505050565b6000613188612e68565b9050613194828261314d565b919050565b600067ffffffffffffffff8211156131b4576131b361311e565b5b6131bd82612f7d565b9050602081019050919050565b82818337600083830152505050565b60006131ec6131e784613199565b61317e565b90508281526020810184848401111561320857613207613119565b5b6132138482856131ca565b509392505050565b600082601f8301126132305761322f613114565b5b81356132408482602086016131d9565b91505092915050565b600080604083850312156132605761325f612e72565b5b600061326e8582860161300a565b925050602083013567ffffffffffffffff81111561328f5761328e612e77565b5b61329b8582860161321b565b9150509250929050565b6132ae81612fe9565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000806000606084860312156132e8576132e7612e72565b5b60006132f6868287016130bf565b9350506020613307868287016130bf565b92505060406133188682870161300a565b9150509250925092565b6000819050919050565b61333581613322565b811461334057600080fd5b50565b6000813590506133528161332c565b92915050565b60006020828403121561336e5761336d612e72565b5b600061337c84828501613343565b91505092915050565b61338e81613322565b82525050565b60006020820190506133a96000830184613385565b92915050565b600080604083850312156133c6576133c5612e72565b5b60006133d485828601613343565b92505060206133e5858286016130bf565b9150509250929050565b60006020828403121561340557613404612e72565b5b6000613413848285016130bf565b91505092915050565b61342581612f01565b811461343057600080fd5b50565b6000813590506134428161341c565b92915050565b6000806040838503121561345f5761345e612e72565b5b600061346d858286016130bf565b925050602061347e85828601613433565b9150509250929050565b600067ffffffffffffffff8211156134a3576134a261311e565b5b6134ac82612f7d565b9050602081019050919050565b60006134cc6134c784613488565b61317e565b9050828152602081018484840111156134e8576134e7613119565b5b6134f38482856131ca565b509392505050565b600082601f8301126135105761350f613114565b5b81356135208482602086016134b9565b91505092915050565b6000806000806080858703121561354357613542612e72565b5b6000613551878288016130bf565b9450506020613562878288016130bf565b93505060406135738782880161300a565b925050606085013567ffffffffffffffff81111561359457613593612e77565b5b6135a0878288016134fb565b91505092959194509250565b600080604083850312156135c3576135c2612e72565b5b60006135d1858286016130bf565b925050602083013567ffffffffffffffff8111156135f2576135f1612e77565b5b6135fe8582860161321b565b9150509250929050565b6000806040838503121561361f5761361e612e72565b5b600061362d858286016130bf565b925050602061363e858286016130bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613704602183612f42565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613796603d83612f42565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613828602d83612f42565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006138ba602b83612f42565b91506138c58261385e565b604082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061394c602f83612f42565b9150613957826138f0565b604082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006139de602c83612f42565b91506139e982613982565b604082019050919050565b60006020820190508181036000830152613a0d816139d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613a79601883612f42565b9150613a8482613a43565b602082019050919050565b60006020820190508181036000830152613aa881613a6c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613b0b602983612f42565b9150613b1682613aaf565b604082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000613b9d602e83612f42565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613bf8565b613c3f8683613bf8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c7c613c77613c7284612fe9565b613c57565b612fe9565b9050919050565b6000819050919050565b613c9683613c61565b613caa613ca282613c83565b848454613c05565b825550505050565b600090565b613cbf613cb2565b613cca818484613c8d565b505050565b5b81811015613cee57613ce3600082613cb7565b600181019050613cd0565b5050565b601f821115613d3357613d0481613bd3565b613d0d84613be8565b81016020851015613d1c578190505b613d30613d2885613be8565b830182613ccf565b50505b505050565b600082821c905092915050565b6000613d5660001984600802613d38565b1980831691505092915050565b6000613d6f8383613d45565b9150826002028217905092915050565b613d8882612f37565b67ffffffffffffffff811115613da157613da061311e565b5b613dab8254613677565b613db6828285613cf2565b600060209050601f831160018114613de95760008415613dd7578287015190505b613de18582613d63565b865550613e49565b601f198416613df786613bd3565b60005b82811015613e1f57848901518255600182019150602085019450602081019050613dfa565b86831015613e3c5784890151613e38601f891682613d45565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613ead602583612f42565b9150613eb882613e51565b604082019050919050565b60006020820190508181036000830152613edc81613ea0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f3f602483612f42565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613fab601983612f42565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061403d603283612f42565b915061404882613fe1565b604082019050919050565b6000602082019050818103600083015261406c81614030565b9050919050565b600081905092915050565b600061408982612f37565b6140938185614073565b93506140a3818560208601612f53565b80840191505092915050565b60006140bb828561407e565b91506140c7828461407e565b91508190509392505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614109601783614073565b9150614114826140d3565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614155601183614073565b91506141608261411f565b601182019050919050565b6000614176826140fc565b9150614182828561407e565b915061418d82614148565b9150614199828461407e565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006141db601483612f42565b91506141e6826141a5565b602082019050919050565b6000602082019050818103600083015261420a816141ce565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614247601083612f42565b915061425282614211565b602082019050919050565b600060208201905081810360008301526142768161423a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006142a48261427d565b6142ae8185614288565b93506142be818560208601612f53565b6142c781612f7d565b840191505092915050565b60006080820190506142e7600083018761307e565b6142f4602083018661307e565b61430160408301856132a5565b81810360608301526143138184614299565b905095945050505050565b60008151905061432d81612ea8565b92915050565b60006020828403121561434957614348612e72565b5b60006143578482850161431e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061439a82612fe9565b91506143a583612fe9565b92508282026143b381612fe9565b915082820484148315176143ca576143c9614360565b5b5092915050565b60006143dc82612fe9565b91506143e783612fe9565b92508282019050808211156143ff576143fe614360565b5b92915050565b600061441082612fe9565b91506000820361442357614422614360565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614464602083612f42565b915061446f8261442e565b602082019050919050565b6000602082019050818103600083015261449381614457565b9050919050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b60006144f6603583612f42565b91506145018261449a565b604082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614591602083612f42565b915061459c8261455b565b602082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006145fd601c83612f42565b9150614608826145c7565b602082019050919050565b6000602082019050818103600083015261462c816145f0565b9050919050565b600061463e82612fe9565b915061464983612fe9565b925082820390508181111561466157614660614360565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212204f0b95e6c4b5f39d9a099dcc15151f5e8d165c4a37a4ba6fa60fcfb86b22514f64736f6c63430008120033