0x60806040523480156200001157600080fd5b506040518060400160405280600981526020017f47525252455154515400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f4747460000000000000000000000000000000000000000000000000000000081525081600290816200008f91906200033f565b508060039081620000a191906200033f565b50620000b2620000c060201b60201c565b600081905550505062000426565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200014757607f821691505b6020821081036200015d576200015c620000ff565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000188565b620001d3868362000188565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002206200021a6200021484620001eb565b620001f5565b620001eb565b9050919050565b6000819050919050565b6200023c83620001ff565b620002546200024b8262000227565b84845462000195565b825550505050565b600090565b6200026b6200025c565b6200027881848462000231565b505050565b5b81811015620002a0576200029460008262000261565b6001810190506200027e565b5050565b601f821115620002ef57620002b98162000163565b620002c48462000178565b81016020851015620002d4578190505b620002ec620002e38562000178565b8301826200027d565b50505b505050565b600082821c905092915050565b60006200031460001984600802620002f4565b1980831691505092915050565b60006200032f838362000301565b9150826002028217905092915050565b6200034a82620000c5565b67ffffffffffffffff811115620003665762000365620000d0565b5b6200037282546200012e565b6200037f828285620002a4565b600060209050601f831160018114620003b75760008415620003a2578287015190505b620003ae858262000321565b8655506200041e565b601f198416620003c78662000163565b60005b82811015620003f157848901518255600182019150602085019450602081019050620003ca565b868310156200041157848901516200040d601f89168262000301565b8355505b6001600288020188555050505b505050505050565b611a4380620004366000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146102d2578063b88d4fde146102fb578063c87b56dd14610317578063e985e9c514610354576100e8565b80636352211e1461021157806370a082311461024e57806395d89b411461028b578063a0712d68146102b6576100e8565b8063095ea7b3116100c6578063095ea7b31461019257806318160ddd146101ae57806323b872dd146101d957806342842e0e146101f5576100e8565b806301ffc9a7146100ed57806306fdde031461012a578063081812fc14610155575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f91906112c4565b610391565b604051610121919061130c565b60405180910390f35b34801561013657600080fd5b5061013f610423565b60405161014c91906113b7565b60405180910390f35b34801561016157600080fd5b5061017c6004803603810190610177919061140f565b6104b5565b604051610189919061147d565b60405180910390f35b6101ac60048036038101906101a791906114c4565b610513565b005b3480156101ba57600080fd5b506101c3610523565b6040516101d09190611513565b60405180910390f35b6101f360048036038101906101ee919061152e565b61053a565b005b61020f600480360381019061020a919061152e565b6107fb565b005b34801561021d57600080fd5b506102386004803603810190610233919061140f565b61081b565b604051610245919061147d565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611581565b61082d565b6040516102829190611513565b60405180910390f35b34801561029757600080fd5b506102a06108c4565b6040516102ad91906113b7565b60405180910390f35b6102d060048036038101906102cb919061140f565b610956565b005b3480156102de57600080fd5b506102f960048036038101906102f491906115da565b610963565b005b6103156004803603810190610310919061174f565b610a6e565b005b34801561032357600080fd5b5061033e6004803603810190610339919061140f565b610ac0565b60405161034b91906113b7565b60405180910390f35b34801561036057600080fd5b5061037b600480360381019061037691906117d2565b610b3d565b604051610388919061130c565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461043290611841565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611841565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c082610bd1565b6104d5576104d463cf4700e460e01b610c4a565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61051f82826001610c54565b5050565b600061052d610d83565b6001546000540303905090565b600061054582610d88565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ba576105b963a114810060e01b610c4a565b5b6000806105c684610e74565b915091506105dc81876105d7610e9b565b610ea3565b610607576105f1866105ec610e9b565b610b3d565b610606576106056359c896be60e01b610c4a565b5b5b6106148686866001610ee7565b801561061f57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106ed856106c9888887610eed565b7c020000000000000000000000000000000000000000000000000000000017610f15565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036107735760006001850190506000600460008381526020019081526020016000205403610771576000548114610770578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600081036107e5576107e463ea553b3460e01b610c4a565b5b6107f28787876001610f40565b50505050505050565b61081683838360405180602001604052806000815250610a6e565b505050565b600061082682610d88565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361087357610872638f4eb60460e01b610c4a565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108d390611841565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611841565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b6109603382610f46565b50565b8060076000610970610e9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a1d610e9b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a62919061130c565b60405180910390a35050565b610a7984848461053a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610aba57610aa4848484846110a9565b610ab957610ab863d1a57ed660e01b610c4a565b5b5b50505050565b6060610acb82610bd1565b610ae057610adf63a14c4b5060e01b610c4a565b5b6000610aea6111d8565b90506000815103610b0a5760405180602001604052806000815250610b35565b80610b14846111ef565b604051602001610b259291906118ae565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610bdc610d83565b11610c4557600054821015610c445760005b6000600460008581526020019081526020016000205491508103610c1d5782610c1690611901565b9250610bee565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610c5f8361081b565b9050818015610ca157508073ffffffffffffffffffffffffffffffffffffffff16610c88610e9b565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610ccd57610cb781610cb2610e9b565b610b3d565b610ccc57610ccb63cfb3b94260e01b610c4a565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610d93610d83565b11610e5e576004600083815260200190815260200160002054905060008103610e35576000548210610dd057610dcf63df2d9b4260e01b610c4a565b5b5b60046000836001900393508381526020019081526020016000205490506000810315610e305760007c010000000000000000000000000000000000000000000000000000000082160315610e6f57610e2f63df2d9b4260e01b610c4a565b5b610dd1565b60007c010000000000000000000000000000000000000000000000000000000082160315610e6f575b610e6e63df2d9b4260e01b610c4a565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610f0486868461123f565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008054905060008203610f6557610f6463b562e8dd60e01b610c4a565b5b610f726000848385610ee7565b610f9283610f836000866000610eed565b610f8c85611248565b17610f15565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161690506000810361104a57611049632e07630060e01b610c4a565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a481816001019150810361105757816000819055505050506110a46000848385610f40565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026110cf610e9b565b8786866040518563ffffffff1660e01b81526004016110f1949392919061197f565b6020604051808303816000875af192505050801561112d57506040513d601f19601f8201168201806040525081019061112a91906119e0565b60015b611185573d806000811461115d576040519150601f19603f3d011682016040523d82523d6000602084013e611162565b606091505b50600081510361117d5761117c63d1a57ed660e01b610c4a565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b60011561122a57600184039350600a81066030018453600a8104905080611208575b50828103602084039350808452505050919050565b60009392505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112a18161126c565b81146112ac57600080fd5b50565b6000813590506112be81611298565b92915050565b6000602082840312156112da576112d9611262565b5b60006112e8848285016112af565b91505092915050565b60008115159050919050565b611306816112f1565b82525050565b600060208201905061132160008301846112fd565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611361578082015181840152602081019050611346565b60008484015250505050565b6000601f19601f8301169050919050565b600061138982611327565b6113938185611332565b93506113a3818560208601611343565b6113ac8161136d565b840191505092915050565b600060208201905081810360008301526113d1818461137e565b905092915050565b6000819050919050565b6113ec816113d9565b81146113f757600080fd5b50565b600081359050611409816113e3565b92915050565b60006020828403121561142557611424611262565b5b6000611433848285016113fa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114678261143c565b9050919050565b6114778161145c565b82525050565b6000602082019050611492600083018461146e565b92915050565b6114a18161145c565b81146114ac57600080fd5b50565b6000813590506114be81611498565b92915050565b600080604083850312156114db576114da611262565b5b60006114e9858286016114af565b92505060206114fa858286016113fa565b9150509250929050565b61150d816113d9565b82525050565b60006020820190506115286000830184611504565b92915050565b60008060006060848603121561154757611546611262565b5b6000611555868287016114af565b9350506020611566868287016114af565b9250506040611577868287016113fa565b9150509250925092565b60006020828403121561159757611596611262565b5b60006115a5848285016114af565b91505092915050565b6115b7816112f1565b81146115c257600080fd5b50565b6000813590506115d4816115ae565b92915050565b600080604083850312156115f1576115f0611262565b5b60006115ff858286016114af565b9250506020611610858286016115c5565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61165c8261136d565b810181811067ffffffffffffffff8211171561167b5761167a611624565b5b80604052505050565b600061168e611258565b905061169a8282611653565b919050565b600067ffffffffffffffff8211156116ba576116b9611624565b5b6116c38261136d565b9050602081019050919050565b82818337600083830152505050565b60006116f26116ed8461169f565b611684565b90508281526020810184848401111561170e5761170d61161f565b5b6117198482856116d0565b509392505050565b600082601f8301126117365761173561161a565b5b81356117468482602086016116df565b91505092915050565b6000806000806080858703121561176957611768611262565b5b6000611777878288016114af565b9450506020611788878288016114af565b9350506040611799878288016113fa565b925050606085013567ffffffffffffffff8111156117ba576117b9611267565b5b6117c687828801611721565b91505092959194509250565b600080604083850312156117e9576117e8611262565b5b60006117f7858286016114af565b9250506020611808858286016114af565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061185957607f821691505b60208210810361186c5761186b611812565b5b50919050565b600081905092915050565b600061188882611327565b6118928185611872565b93506118a2818560208601611343565b80840191505092915050565b60006118ba828561187d565b91506118c6828461187d565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061190c826113d9565b91506000820361191f5761191e6118d2565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006119518261192a565b61195b8185611935565b935061196b818560208601611343565b6119748161136d565b840191505092915050565b6000608082019050611994600083018761146e565b6119a1602083018661146e565b6119ae6040830185611504565b81810360608301526119c08184611946565b905095945050505050565b6000815190506119da81611298565b92915050565b6000602082840312156119f6576119f5611262565b5b6000611a04848285016119cb565b9150509291505056fea2646970667358221220ff9bbcf1179f4dd570cbda7d9cac96698545187d921793444bd95cf97851191464736f6c63430008120033