0x60806040526108006001556003600255660221b262dd80006003556040518060600160405280603b815260200162002a95603b91396004908162000044919062000318565b5060006005553480156200005757600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ff565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012057607f821691505b602082108103620001365762000135620000d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000161565b620001ac868362000161565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620001f9620001f3620001ed84620001c4565b620001ce565b620001c4565b9050919050565b6000819050919050565b6200021583620001d8565b6200022d620002248262000200565b8484546200016e565b825550505050565b600090565b6200024462000235565b620002518184846200020a565b505050565b5b8181101562000279576200026d6000826200023a565b60018101905062000257565b5050565b601f821115620002c85762000292816200013c565b6200029d8462000151565b81016020851015620002ad578190505b620002c5620002bc8562000151565b83018262000256565b50505b505050565b600082821c905092915050565b6000620002ed60001984600802620002cd565b1980831691505092915050565b6000620003088383620002da565b9150826002028217905092915050565b62000323826200009e565b67ffffffffffffffff8111156200033f576200033e620000a9565b5b6200034b825462000107565b620003588282856200027d565b600060209050601f8311600181146200039057600084156200037b578287015190505b620003878582620002fa565b865550620003f7565b601f198416620003a0866200013c565b60005b82811015620003ca57848901518255600182019150602085019450602081019050620003a3565b86831015620003ea5784890151620003e6601f891682620002da565b8355505b6001600288020188555050505b505050505050565b612686806200040f6000396000f3fe60806040526004361061014b5760003560e01c80636352211e116100b6578063a22cb4651161006f578063a22cb4651461045d578063b88d4fde14610486578063bf8fbbd2146104af578063c87b56dd146104da578063e985e9c514610517578063ed6661c2146105545761014b565b80636352211e1461034657806370a08231146103835780638da5cb5b146103c057806395d89b41146103eb57806398710d1e14610416578063a0712d68146104415761014b565b806323b872dd1161010857806323b872dd1461027257806332cb6b0c1461029b5780633ccfd60b146102c657806342842e0e146102dd57806347064d6a146103065780635b70ea9f1461032f5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f5578063129ee21a1461021e57806318160ddd14610247575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190611855565b61057f565b604051610184919061189d565b60405180910390f35b34801561019957600080fd5b506101a2610611565b6040516101af9190611948565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906119a0565b61064e565b6040516101ec9190611a0e565b60405180910390f35b34801561020157600080fd5b5061021c60048036038101906102179190611a55565b6106ca565b005b34801561022a57600080fd5b5061024560048036038101906102409190611a95565b610843565b005b34801561025357600080fd5b5061025c6108eb565b6040516102699190611af7565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190611b12565b6108fe565b005b3480156102a757600080fd5b506102b061090e565b6040516102bd9190611af7565b60405180910390f35b3480156102d257600080fd5b506102db610914565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190611b12565b6109f1565b005b34801561031257600080fd5b5061032d60048036038101906103289190611c9a565b610a11565b005b34801561033b57600080fd5b50610344610ab2565b005b34801561035257600080fd5b5061036d600480360381019061036891906119a0565b610bf0565b60405161037a9190611a0e565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611ce3565b610c02565b6040516103b79190611af7565b60405180910390f35b3480156103cc57600080fd5b506103d5610c96565b6040516103e29190611a0e565b60405180910390f35b3480156103f757600080fd5b50610400610cbf565b60405161040d9190611948565b60405180910390f35b34801561042257600080fd5b5061042b610cfc565b6040516104389190611af7565b60405180910390f35b61045b600480360381019061045691906119a0565b610d02565b005b34801561046957600080fd5b50610484600480360381019061047f9190611d3c565b610dc3565b005b34801561049257600080fd5b506104ad60048036038101906104a89190611e1d565b610f3a565b005b3480156104bb57600080fd5b506104c4610f4b565b6040516104d19190611af7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906119a0565b610f51565b60405161050e9190611948565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190611ea0565b611072565b60405161054b919061189d565b60405180910390f35b34801561056057600080fd5b50610569611106565b6040516105769190611af7565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105da57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060a5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280600981526020017f4c3220426c6f636b730000000000000000000000000000000000000000000000815250905090565b60006106598261110c565b61068f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d58261112d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361070f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072e6111f9565b73ffffffffffffffffffffffffffffffffffffffff16146107915761075a816107556111f9565b611072565b610790576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c890611f2c565b60405180910390fd5b826001819055508160038190555080600281905550505050565b60006108f5611201565b60055403905090565b610909838383611206565b505050565b61080081565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990611f2c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109ed573d6000803e3d6000fd5b5050565b610a0c83838360405180602001604052806000815250610f3a565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690611f2c565b60405180910390fd5b8060049081610aae9190612158565b5050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790612276565b60405180910390fd5b6000610b2a6111f9565b90506000600254905060015481610b3f6108eb565b610b4991906122c5565b1115610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8190612345565b60405180910390fd5b600254610b968361157c565b82610ba191906122c5565b1115610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906123b1565b60405180910390fd5b610bec82826115d3565b5050565b6000610bfb8261112d565b9050919050565b600080610c0e83611775565b03610c45576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f244c324200000000000000000000000000000000000000000000000000000000815250905090565b60025481565b6000610d0c6111f9565b905061080082610d1a6108eb565b610d2491906122c5565b1115610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c9061241d565b60405180910390fd5b3460035483610d74919061243d565b1115610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906124cb565b60405180910390fd5b610dbf81836115d3565b5050565b610dcb6111f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e2f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060096000610e3c6111f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ee96111f9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f2e919061189d565b60405180910390a35050565b610f45848484611206565b50505050565b60035481565b6060610f5c8261110c565b610f92576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060048054610fa190611f7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcd90611f7b565b801561101a5780601f10610fef5761010080835404028352916020019161101a565b820191906000526020600020905b815481529060010190602001808311610ffd57829003601f168201915b50505050509050600081510361103f576040518060200160405280600081525061106a565b806110498461177f565b60405160200161105a92919061260b565b6040516020818303038152906040525b915050919050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60015481565b600081611117611201565b11158015611126575060055482105b9050919050565b6000808290508061113c611201565b116111c2576005548110156111c15760006006600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036111bf575b600081036111b557600660008360019003935083815260200190815260200160002054905061118b565b80925050506111f4565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b60006112118261112d565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611278576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff166112d16111f9565b73ffffffffffffffffffffffffffffffffffffffff16148061130057506112ff866112fa6111f9565b611072565b5b8061133d575061130e6111f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611376576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061138183611775565b146113bd576008600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61148487611775565b1717600660008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084160361150c576000600185019050600060066000838152602001908152602001600020540361150a576005548114611509578360066000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461157486868660016117d9565b505050505050565b600067ffffffffffffffff6040600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6000600554905060006115e584611775565b0361161c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008203611656576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b178202600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16116bb600184146117df565b901b60a042901b6116cb85611775565b171760066000838152602001908152602001600020819055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106116f15781600581905550505061177060008483856117d9565b505050565b6000819050919050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b80156117c557600183039250600a81066030018353600a810490506117a5565b508181036020830392508083525050919050565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611832816117fd565b811461183d57600080fd5b50565b60008135905061184f81611829565b92915050565b60006020828403121561186b5761186a6117f3565b5b600061187984828501611840565b91505092915050565b60008115159050919050565b61189781611882565b82525050565b60006020820190506118b2600083018461188e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118f25780820151818401526020810190506118d7565b60008484015250505050565b6000601f19601f8301169050919050565b600061191a826118b8565b61192481856118c3565b93506119348185602086016118d4565b61193d816118fe565b840191505092915050565b60006020820190508181036000830152611962818461190f565b905092915050565b6000819050919050565b61197d8161196a565b811461198857600080fd5b50565b60008135905061199a81611974565b92915050565b6000602082840312156119b6576119b56117f3565b5b60006119c48482850161198b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119f8826119cd565b9050919050565b611a08816119ed565b82525050565b6000602082019050611a2360008301846119ff565b92915050565b611a32816119ed565b8114611a3d57600080fd5b50565b600081359050611a4f81611a29565b92915050565b60008060408385031215611a6c57611a6b6117f3565b5b6000611a7a85828601611a40565b9250506020611a8b8582860161198b565b9150509250929050565b600080600060608486031215611aae57611aad6117f3565b5b6000611abc8682870161198b565b9350506020611acd8682870161198b565b9250506040611ade8682870161198b565b9150509250925092565b611af18161196a565b82525050565b6000602082019050611b0c6000830184611ae8565b92915050565b600080600060608486031215611b2b57611b2a6117f3565b5b6000611b3986828701611a40565b9350506020611b4a86828701611a40565b9250506040611b5b8682870161198b565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ba7826118fe565b810181811067ffffffffffffffff82111715611bc657611bc5611b6f565b5b80604052505050565b6000611bd96117e9565b9050611be58282611b9e565b919050565b600067ffffffffffffffff821115611c0557611c04611b6f565b5b611c0e826118fe565b9050602081019050919050565b82818337600083830152505050565b6000611c3d611c3884611bea565b611bcf565b905082815260208101848484011115611c5957611c58611b6a565b5b611c64848285611c1b565b509392505050565b600082601f830112611c8157611c80611b65565b5b8135611c91848260208601611c2a565b91505092915050565b600060208284031215611cb057611caf6117f3565b5b600082013567ffffffffffffffff811115611cce57611ccd6117f8565b5b611cda84828501611c6c565b91505092915050565b600060208284031215611cf957611cf86117f3565b5b6000611d0784828501611a40565b91505092915050565b611d1981611882565b8114611d2457600080fd5b50565b600081359050611d3681611d10565b92915050565b60008060408385031215611d5357611d526117f3565b5b6000611d6185828601611a40565b9250506020611d7285828601611d27565b9150509250929050565b600067ffffffffffffffff821115611d9757611d96611b6f565b5b611da0826118fe565b9050602081019050919050565b6000611dc0611dbb84611d7c565b611bcf565b905082815260208101848484011115611ddc57611ddb611b6a565b5b611de7848285611c1b565b509392505050565b600082601f830112611e0457611e03611b65565b5b8135611e14848260208601611dad565b91505092915050565b60008060008060808587031215611e3757611e366117f3565b5b6000611e4587828801611a40565b9450506020611e5687828801611a40565b9350506040611e678782880161198b565b925050606085013567ffffffffffffffff811115611e8857611e876117f8565b5b611e9487828801611def565b91505092959194509250565b60008060408385031215611eb757611eb66117f3565b5b6000611ec585828601611a40565b9250506020611ed685828601611a40565b9150509250929050565b7f6e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b6000611f166009836118c3565b9150611f2182611ee0565b602082019050919050565b60006020820190508181036000830152611f4581611f09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f9357607f821691505b602082108103611fa657611fa5611f4c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261200e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611fd1565b6120188683611fd1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061205561205061204b8461196a565b612030565b61196a565b9050919050565b6000819050919050565b61206f8361203a565b61208361207b8261205c565b848454611fde565b825550505050565b600090565b61209861208b565b6120a3818484612066565b505050565b5b818110156120c7576120bc600082612090565b6001810190506120a9565b5050565b601f82111561210c576120dd81611fac565b6120e684611fc1565b810160208510156120f5578190505b61210961210185611fc1565b8301826120a8565b50505b505050565b600082821c905092915050565b600061212f60001984600802612111565b1980831691505092915050565b6000612148838361211e565b9150826002028217905092915050565b612161826118b8565b67ffffffffffffffff81111561217a57612179611b6f565b5b6121848254611f7b565b61218f8282856120cb565b600060209050601f8311600181146121c257600084156121b0578287015190505b6121ba858261213c565b865550612222565b601f1984166121d086611fac565b60005b828110156121f8578489015182556001820191506020850194506020810190506121d3565b868310156122155784890151612211601f89168261211e565b8355505b6001600288020188555050505b505050505050565b7f6e6f205363726970740000000000000000000000000000000000000000000000600082015250565b60006122606009836118c3565b915061226b8261222a565b602082019050919050565b6000602082019050818103600083015261228f81612253565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122d08261196a565b91506122db8361196a565b92508282019050808211156122f3576122f2612296565b5b92915050565b7f4c3220467265656d696e7420536f6c64204f7574000000000000000000000000600082015250565b600061232f6014836118c3565b915061233a826122f9565b602082019050919050565b6000602082019050818103600083015261235e81612322565b9050919050565b7f4d6178204c3220626c6f636b73207065722057616c6c65740000000000000000600082015250565b600061239b6018836118c3565b91506123a682612365565b602082019050919050565b600060208201905081810360008301526123ca8161238e565b9050919050565b7f4c3220626c6f636b7320736f6c64204f75740000000000000000000000000000600082015250565b60006124076012836118c3565b9150612412826123d1565b602082019050919050565b60006020820190508181036000830152612436816123fa565b9050919050565b60006124488261196a565b91506124538361196a565b92508282026124618161196a565b9150828204841483151761247857612477612296565b5b5092915050565b7f56616c756520746f204c6f770000000000000000000000000000000000000000600082015250565b60006124b5600c836118c3565b91506124c08261247f565b602082019050919050565b600060208201905081810360008301526124e4816124a8565b9050919050565b600081905092915050565b7f697066733a2f2f00000000000000000000000000000000000000000000000000600082015250565b600061252c6007836124eb565b9150612537826124f6565b600782019050919050565b600061254d826118b8565b61255781856124eb565b93506125678185602086016118d4565b80840191505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b60006125a96001836124eb565b91506125b482612573565b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006125f56005836124eb565b9150612600826125bf565b600582019050919050565b60006126168261251f565b91506126228285612542565b915061262d8261259c565b91506126398284612542565b9150612644826125e8565b9150819050939250505056fea2646970667358221220c217ac88de54c4034ab4b24fb5072b177908d34c35ded3e760ec1ec31b08903464736f6c6343000811003362616679626569666b78687572346e6d6f76646376376e356669757264727a61676e6864627636797335373432706f68796163666e7a376876776d