60806040523480156200001157600080fd5b5060405162002bd138038062002bd18339818101604052810190620000379190620001fa565b818181600090816200004a9190620004ca565b5080600190816200005c9190620004ca565b5050505050620005b1565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000d08262000085565b810181811067ffffffffffffffff82111715620000f257620000f162000096565b5b80604052505050565b60006200010762000067565b9050620001158282620000c5565b919050565b600067ffffffffffffffff82111562000138576200013762000096565b5b620001438262000085565b9050602081019050919050565b60005b838110156200017057808201518184015260208101905062000153565b60008484015250505050565b6000620001936200018d846200011a565b620000fb565b905082815260208101848484011115620001b257620001b162000080565b5b620001bf84828562000150565b509392505050565b600082601f830112620001df57620001de6200007b565b5b8151620001f18482602086016200017c565b91505092915050565b6000806040838503121562000214576200021362000071565b5b600083015167ffffffffffffffff81111562000235576200023462000076565b5b6200024385828601620001c7565b925050602083015167ffffffffffffffff81111562000267576200026662000076565b5b6200027585828601620001c7565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d257607f821691505b602082108103620002e857620002e76200028a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000313565b6200035e868362000313565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003ab620003a56200039f8462000376565b62000380565b62000376565b9050919050565b6000819050919050565b620003c7836200038a565b620003df620003d682620003b2565b84845462000320565b825550505050565b600090565b620003f6620003e7565b62000403818484620003bc565b505050565b5b818110156200042b576200041f600082620003ec565b60018101905062000409565b5050565b601f8211156200047a576200044481620002ee565b6200044f8462000303565b810160208510156200045f578190505b620004776200046e8562000303565b83018262000408565b50505b505050565b600082821c905092915050565b60006200049f600019846008026200047f565b1980831691505092915050565b6000620004ba83836200048c565b9150826002028217905092915050565b620004d5826200027f565b67ffffffffffffffff811115620004f157620004f062000096565b5b620004fd8254620002b9565b6200050a8282856200042f565b600060209050601f8311600181146200054257600084156200052d578287015190505b620005398582620004ac565b865550620005a9565b601f1984166200055286620002ee565b60005b828110156200057c5784890151825560018201915060208501945060208101905062000555565b868310156200059c578489015162000598601f8916826200048c565b8355505b6001600288020188555050505b505050505050565b61261080620005c16000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b806370a08231146101f157806395d89b4114610221578063a0712d681461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611875565b6102f3565b60405161011691906118bd565b60405180910390f35b6101276103d5565b6040516101349190611968565b60405180910390f35b610157600480360381019061015291906119c0565b610467565b6040516101649190611a2e565b60405180910390f35b61018760048036038101906101829190611a75565b6104ad565b005b6101a3600480360381019061019e9190611ab5565b6105c4565b005b6101bf60048036038101906101ba9190611ab5565b610624565b005b6101db60048036038101906101d691906119c0565b610644565b6040516101e89190611a2e565b60405180910390f35b61020b60048036038101906102069190611b08565b6106ca565b6040516102189190611b44565b60405180910390f35b610229610781565b6040516102369190611968565b60405180910390f35b610259600480360381019061025491906119c0565b610813565b005b61027560048036038101906102709190611b8b565b610820565b005b610291600480360381019061028c9190611d00565b610836565b005b6102ad60048036038101906102a891906119c0565b610898565b6040516102ba9190611968565b60405180910390f35b6102dd60048036038101906102d89190611d83565b610900565b6040516102ea91906118bd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610994565b5b9050919050565b6060600080546103e490611df2565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611df2565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b6000610472826109fe565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104b882610644565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051f90611e95565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610547610a49565b73ffffffffffffffffffffffffffffffffffffffff161480610576575061057581610570610a49565b610900565b5b6105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90611f27565b60405180910390fd5b6105bf8383610a51565b505050565b6105d56105cf610a49565b82610b0a565b610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b90611fb9565b60405180910390fd5b61061f838383610b9f565b505050565b61063f83838360405180602001604052806000815250610836565b505050565b60008061065083610e98565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b890612025565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610731906120b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461079090611df2565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90611df2565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050905090565b61081d3382610ed5565b50565b61083261082b610a49565b83836110f2565b5050565b610847610841610a49565b83610b0a565b610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087d90611fb9565b60405180910390fd5b6108928484848461125e565b50505050565b60606108a3826109fe565b60006108ad6112ba565b905060008151116108cd57604051806020016040528060008152506108f8565b806108d7846112d1565b6040516020016108e8929190612113565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a078161139f565b610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90612025565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610ac483610644565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b1683610644565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b585750610b578185610900565b5b80610b9657508373ffffffffffffffffffffffffffffffffffffffff16610b7e84610467565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bbf82610644565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c906121a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b9061223b565b60405180910390fd5b610c9183838360016113e0565b8273ffffffffffffffffffffffffffffffffffffffff16610cb182610644565b73ffffffffffffffffffffffffffffffffffffffff1614610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe906121a9565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e938383836001611506565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906122a7565b60405180910390fd5b610f4d8161139f565b15610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612313565b60405180910390fd5b610f9b6000838360016113e0565b610fa48161139f565b15610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90612313565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110ee600083836001611506565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111579061237f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125191906118bd565b60405180910390a3505050565b611269848484610b9f565b6112758484848461150c565b6112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612411565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016112e084611693565b01905060008167ffffffffffffffff8111156112ff576112fe611bd5565b5b6040519080825280601f01601f1916602001820160405280156113315781602001600182028036833780820191505090505b509050600082602001820190505b600115611394578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161138857611387612431565b5b0494506000850361133f575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166113c183610e98565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561150057600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146114745780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461146c919061248f565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146114ff5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114f791906124c3565b925050819055505b5b50505050565b50505050565b600061152d8473ffffffffffffffffffffffffffffffffffffffff166117e6565b15611686578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611556610a49565b8786866040518563ffffffff1660e01b8152600401611578949392919061254c565b6020604051808303816000875af19250505080156115b457506040513d601f19601f820116820180604052508101906115b191906125ad565b60015b611636573d80600081146115e4576040519150601f19603f3d011682016040523d82523d6000602084013e6115e9565b606091505b50600081510361162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590612411565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061168b565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106116f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816116e7576116e6612431565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061172e576d04ee2d6d415b85acef8100000000838161172457611723612431565b5b0492506020810190505b662386f26fc10000831061175d57662386f26fc10000838161175357611752612431565b5b0492506010810190505b6305f5e1008310611786576305f5e100838161177c5761177b612431565b5b0492506008810190505b61271083106117ab5761271083816117a1576117a0612431565b5b0492506004810190505b606483106117ce57606483816117c4576117c3612431565b5b0492506002810190505b600a83106117dd576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118528161181d565b811461185d57600080fd5b50565b60008135905061186f81611849565b92915050565b60006020828403121561188b5761188a611813565b5b600061189984828501611860565b91505092915050565b60008115159050919050565b6118b7816118a2565b82525050565b60006020820190506118d260008301846118ae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119125780820151818401526020810190506118f7565b60008484015250505050565b6000601f19601f8301169050919050565b600061193a826118d8565b61194481856118e3565b93506119548185602086016118f4565b61195d8161191e565b840191505092915050565b60006020820190508181036000830152611982818461192f565b905092915050565b6000819050919050565b61199d8161198a565b81146119a857600080fd5b50565b6000813590506119ba81611994565b92915050565b6000602082840312156119d6576119d5611813565b5b60006119e4848285016119ab565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a18826119ed565b9050919050565b611a2881611a0d565b82525050565b6000602082019050611a436000830184611a1f565b92915050565b611a5281611a0d565b8114611a5d57600080fd5b50565b600081359050611a6f81611a49565b92915050565b60008060408385031215611a8c57611a8b611813565b5b6000611a9a85828601611a60565b9250506020611aab858286016119ab565b9150509250929050565b600080600060608486031215611ace57611acd611813565b5b6000611adc86828701611a60565b9350506020611aed86828701611a60565b9250506040611afe868287016119ab565b9150509250925092565b600060208284031215611b1e57611b1d611813565b5b6000611b2c84828501611a60565b91505092915050565b611b3e8161198a565b82525050565b6000602082019050611b596000830184611b35565b92915050565b611b68816118a2565b8114611b7357600080fd5b50565b600081359050611b8581611b5f565b92915050565b60008060408385031215611ba257611ba1611813565b5b6000611bb085828601611a60565b9250506020611bc185828601611b76565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c0d8261191e565b810181811067ffffffffffffffff82111715611c2c57611c2b611bd5565b5b80604052505050565b6000611c3f611809565b9050611c4b8282611c04565b919050565b600067ffffffffffffffff821115611c6b57611c6a611bd5565b5b611c748261191e565b9050602081019050919050565b82818337600083830152505050565b6000611ca3611c9e84611c50565b611c35565b905082815260208101848484011115611cbf57611cbe611bd0565b5b611cca848285611c81565b509392505050565b600082601f830112611ce757611ce6611bcb565b5b8135611cf7848260208601611c90565b91505092915050565b60008060008060808587031215611d1a57611d19611813565b5b6000611d2887828801611a60565b9450506020611d3987828801611a60565b9350506040611d4a878288016119ab565b925050606085013567ffffffffffffffff811115611d6b57611d6a611818565b5b611d7787828801611cd2565b91505092959194509250565b60008060408385031215611d9a57611d99611813565b5b6000611da885828601611a60565b9250506020611db985828601611a60565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e0a57607f821691505b602082108103611e1d57611e1c611dc3565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e7f6021836118e3565b9150611e8a82611e23565b604082019050919050565b60006020820190508181036000830152611eae81611e72565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611f11603d836118e3565b9150611f1c82611eb5565b604082019050919050565b60006020820190508181036000830152611f4081611f04565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611fa3602d836118e3565b9150611fae82611f47565b604082019050919050565b60006020820190508181036000830152611fd281611f96565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061200f6018836118e3565b915061201a82611fd9565b602082019050919050565b6000602082019050818103600083015261203e81612002565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006120a16029836118e3565b91506120ac82612045565b604082019050919050565b600060208201905081810360008301526120d081612094565b9050919050565b600081905092915050565b60006120ed826118d8565b6120f781856120d7565b93506121078185602086016118f4565b80840191505092915050565b600061211f82856120e2565b915061212b82846120e2565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121936025836118e3565b915061219e82612137565b604082019050919050565b600060208201905081810360008301526121c281612186565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006122256024836118e3565b9150612230826121c9565b604082019050919050565b6000602082019050818103600083015261225481612218565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006122916020836118e3565b915061229c8261225b565b602082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006122fd601c836118e3565b9150612308826122c7565b602082019050919050565b6000602082019050818103600083015261232c816122f0565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006123696019836118e3565b915061237482612333565b602082019050919050565b600060208201905081810360008301526123988161235c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006123fb6032836118e3565b91506124068261239f565b604082019050919050565b6000602082019050818103600083015261242a816123ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249a8261198a565b91506124a58361198a565b92508282039050818111156124bd576124bc612460565b5b92915050565b60006124ce8261198a565b91506124d98361198a565b92508282019050808211156124f1576124f0612460565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061251e826124f7565b6125288185612502565b93506125388185602086016118f4565b6125418161191e565b840191505092915050565b60006080820190506125616000830187611a1f565b61256e6020830186611a1f565b61257b6040830185611b35565b818103606083015261258d8184612513565b905095945050505050565b6000815190506125a781611849565b92915050565b6000602082840312156125c3576125c2611813565b5b60006125d184828501612598565b9150509291505056fea26469706673582212209b260c2cd0ce859663c1e0cebab1df59099781649fc3e36acc771ec3ef1a159f64736f6c634300081300330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036e6674000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e00000000000000000000000000000000000000000000000000000000000000