0x60806040523480156200001157600080fd5b506040518060400160405280601381526020017f47697665204261636b204d7920456d696c6961000000000000000000000000008152506040518060400160405280600681526020017f454d494c4941000000000000000000000000000000000000000000000000000081525081600290816200008f91906200033f565b508060039081620000a191906200033f565b50620000b2620000c060201b60201c565b600081905550505062000426565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200014757607f821691505b6020821081036200015d576200015c620000ff565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000188565b620001d3868362000188565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002206200021a6200021484620001eb565b620001f5565b620001eb565b9050919050565b6000819050919050565b6200023c83620001ff565b620002546200024b8262000227565b84845462000195565b825550505050565b600090565b6200026b6200025c565b6200027881848462000231565b505050565b5b81811015620002a0576200029460008262000261565b6001810190506200027e565b5050565b601f821115620002ef57620002b98162000163565b620002c48462000178565b81016020851015620002d4578190505b620002ec620002e38562000178565b8301826200027d565b50505b505050565b600082821c905092915050565b60006200031460001984600802620002f4565b1980831691505092915050565b60006200032f838362000301565b9150826002028217905092915050565b6200034a82620000c5565b67ffffffffffffffff811115620003665762000365620000d0565b5b6200037282546200012e565b6200037f828285620002a4565b600060209050601f831160018114620003b75760008415620003a2578287015190505b620003ae858262000321565b8655506200041e565b601f198416620003c78662000163565b60005b82811015620003f157848901518255600182019150602085019450602081019050620003ca565b868310156200041157848901516200040d601f89168262000301565b8355505b6001600288020188555050505b505050505050565b611af880620004366000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146102d2578063b88d4fde146102fb578063c87b56dd14610317578063e985e9c514610354576100e8565b80636352211e1461021157806370a082311461024e57806395d89b411461028b578063a0712d68146102b6576100e8565b8063095ea7b3116100c6578063095ea7b31461019257806318160ddd146101ae57806323b872dd146101d957806342842e0e146101f5576100e8565b806301ffc9a7146100ed57806306fdde031461012a578063081812fc14610155575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f919061130d565b610391565b6040516101219190611355565b60405180910390f35b34801561013657600080fd5b5061013f610423565b60405161014c9190611400565b60405180910390f35b34801561016157600080fd5b5061017c60048036038101906101779190611458565b6104b5565b60405161018991906114c6565b60405180910390f35b6101ac60048036038101906101a7919061150d565b610513565b005b3480156101ba57600080fd5b506101c3610523565b6040516101d0919061155c565b60405180910390f35b6101f360048036038101906101ee9190611577565b61053a565b005b61020f600480360381019061020a9190611577565b6107fb565b005b34801561021d57600080fd5b5061023860048036038101906102339190611458565b61081b565b60405161024591906114c6565b60405180910390f35b34801561025a57600080fd5b50610275600480360381019061027091906115ca565b61082d565b604051610282919061155c565b60405180910390f35b34801561029757600080fd5b506102a06108c4565b6040516102ad9190611400565b60405180910390f35b6102d060048036038101906102cb9190611458565b610956565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611623565b6109ac565b005b61031560048036038101906103109190611798565b610ab7565b005b34801561032357600080fd5b5061033e60048036038101906103399190611458565b610b09565b60405161034b9190611400565b60405180910390f35b34801561036057600080fd5b5061037b6004803603810190610376919061181b565b610b86565b6040516103889190611355565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546104329061188a565b80601f016020809104026020016040519081016040528092919081815260200182805461045e9061188a565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c082610c1a565b6104d5576104d463cf4700e460e01b610c93565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61051f82826001610c9d565b5050565b600061052d610dcc565b6001546000540303905090565b600061054582610dd1565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ba576105b963a114810060e01b610c93565b5b6000806105c684610ebd565b915091506105dc81876105d7610ee4565b610eec565b610607576105f1866105ec610ee4565b610b86565b610606576106056359c896be60e01b610c93565b5b5b6106148686866001610f30565b801561061f57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106ed856106c9888887610f36565b7c020000000000000000000000000000000000000000000000000000000017610f5e565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036107735760006001850190506000600460008381526020019081526020016000205403610771576000548114610770578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600081036107e5576107e463ea553b3460e01b610c93565b5b6107f28787876001610f89565b50505050505050565b61081683838360405180602001604052806000815250610ab7565b505050565b600061082682610dd1565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361087357610872638f4eb60460e01b610c93565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108d39061188a565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff9061188a565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b655af3107a400034101561099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690611907565b60405180910390fd5b6109a93382610f8f565b50565b80600760006109b9610ee4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a66610ee4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610aab9190611355565b60405180910390a35050565b610ac284848461053a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610b0357610aed848484846110f2565b610b0257610b0163d1a57ed660e01b610c93565b5b5b50505050565b6060610b1482610c1a565b610b2957610b2863a14c4b5060e01b610c93565b5b6000610b33611221565b90506000815103610b535760405180602001604052806000815250610b7e565b80610b5d84611238565b604051602001610b6e929190611963565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610c25610dcc565b11610c8e57600054821015610c8d5760005b6000600460008581526020019081526020016000205491508103610c665782610c5f906119b6565b9250610c37565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610ca88361081b565b9050818015610cea57508073ffffffffffffffffffffffffffffffffffffffff16610cd1610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d1657610d0081610cfb610ee4565b610b86565b610d1557610d1463cfb3b94260e01b610c93565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610ddc610dcc565b11610ea7576004600083815260200190815260200160002054905060008103610e7e576000548210610e1957610e1863df2d9b4260e01b610c93565b5b5b60046000836001900393508381526020019081526020016000205490506000810315610e795760007c010000000000000000000000000000000000000000000000000000000082160315610eb857610e7863df2d9b4260e01b610c93565b5b610e1a565b60007c010000000000000000000000000000000000000000000000000000000082160315610eb8575b610eb763df2d9b4260e01b610c93565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610f4d868684611288565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008054905060008203610fae57610fad63b562e8dd60e01b610c93565b5b610fbb6000848385610f30565b610fdb83610fcc6000866000610f36565b610fd585611291565b17610f5e565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161690506000810361109357611092632e07630060e01b610c93565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081036110a057816000819055505050506110ed6000848385610f89565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611118610ee4565b8786866040518563ffffffff1660e01b815260040161113a9493929190611a34565b6020604051808303816000875af192505050801561117657506040513d601f19601f820116820180604052508101906111739190611a95565b60015b6111ce573d80600081146111a6576040519150601f19603f3d011682016040523d82523d6000602084013e6111ab565b606091505b5060008151036111c6576111c563d1a57ed660e01b610c93565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b60011561127357600184039350600a81066030018453600a8104905080611251575b50828103602084039350808452505050919050565b60009392505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112ea816112b5565b81146112f557600080fd5b50565b600081359050611307816112e1565b92915050565b600060208284031215611323576113226112ab565b5b6000611331848285016112f8565b91505092915050565b60008115159050919050565b61134f8161133a565b82525050565b600060208201905061136a6000830184611346565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113aa57808201518184015260208101905061138f565b60008484015250505050565b6000601f19601f8301169050919050565b60006113d282611370565b6113dc818561137b565b93506113ec81856020860161138c565b6113f5816113b6565b840191505092915050565b6000602082019050818103600083015261141a81846113c7565b905092915050565b6000819050919050565b61143581611422565b811461144057600080fd5b50565b6000813590506114528161142c565b92915050565b60006020828403121561146e5761146d6112ab565b5b600061147c84828501611443565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114b082611485565b9050919050565b6114c0816114a5565b82525050565b60006020820190506114db60008301846114b7565b92915050565b6114ea816114a5565b81146114f557600080fd5b50565b600081359050611507816114e1565b92915050565b60008060408385031215611524576115236112ab565b5b6000611532858286016114f8565b925050602061154385828601611443565b9150509250929050565b61155681611422565b82525050565b6000602082019050611571600083018461154d565b92915050565b6000806000606084860312156115905761158f6112ab565b5b600061159e868287016114f8565b93505060206115af868287016114f8565b92505060406115c086828701611443565b9150509250925092565b6000602082840312156115e0576115df6112ab565b5b60006115ee848285016114f8565b91505092915050565b6116008161133a565b811461160b57600080fd5b50565b60008135905061161d816115f7565b92915050565b6000806040838503121561163a576116396112ab565b5b6000611648858286016114f8565b92505060206116598582860161160e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116a5826113b6565b810181811067ffffffffffffffff821117156116c4576116c361166d565b5b80604052505050565b60006116d76112a1565b90506116e3828261169c565b919050565b600067ffffffffffffffff8211156117035761170261166d565b5b61170c826113b6565b9050602081019050919050565b82818337600083830152505050565b600061173b611736846116e8565b6116cd565b90508281526020810184848401111561175757611756611668565b5b611762848285611719565b509392505050565b600082601f83011261177f5761177e611663565b5b813561178f848260208601611728565b91505092915050565b600080600080608085870312156117b2576117b16112ab565b5b60006117c0878288016114f8565b94505060206117d1878288016114f8565b93505060406117e287828801611443565b925050606085013567ffffffffffffffff811115611803576118026112b0565b5b61180f8782880161176a565b91505092959194509250565b60008060408385031215611832576118316112ab565b5b6000611840858286016114f8565b9250506020611851858286016114f8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118a257607f821691505b6020821081036118b5576118b461185b565b5b50919050565b7f496e73756666696369656e74207762742073656e740000000000000000000000600082015250565b60006118f160158361137b565b91506118fc826118bb565b602082019050919050565b60006020820190508181036000830152611920816118e4565b9050919050565b600081905092915050565b600061193d82611370565b6119478185611927565b935061195781856020860161138c565b80840191505092915050565b600061196f8285611932565b915061197b8284611932565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119c182611422565b9150600082036119d4576119d3611987565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b6000611a06826119df565b611a1081856119ea565b9350611a2081856020860161138c565b611a29816113b6565b840191505092915050565b6000608082019050611a4960008301876114b7565b611a5660208301866114b7565b611a63604083018561154d565b8181036060830152611a7581846119fb565b905095945050505050565b600081519050611a8f816112e1565b92915050565b600060208284031215611aab57611aaa6112ab565b5b6000611ab984828501611a80565b9150509291505056fea26469706673582212202c9a5f8d3eba61dc75b72fbc2557fd59f87dd805a018588ed4a387c3ffd45d9964736f6c63430008110033