60806040523480156200001157600080fd5b50604051620027d2380380620027d2833981810160405281019062000037919062000477565b6040518060400160405280600481526020017f62696769000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f62696769000000000000000000000000000000000000000000000000000000008152508160039081620000b4919062000738565b508060049081620000c6919062000738565b505050620000e9620000dd620001b460201b60201c565b620001bc60201b60201c565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ac33620001806200028260201b60201c565b600a6200018e9190620009af565b642e90edd000620001a0919062000a00565b6200028b60201b60201c565b505062000b37565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f49062000aac565b60405180910390fd5b62000311600083836200040360201b60201c565b806002600082825462000325919062000ace565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200037c919062000ace565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003e3919062000b1a565b60405180910390a3620003ff600083836200040860201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200043f8262000412565b9050919050565b620004518162000432565b81146200045d57600080fd5b50565b600081519050620004718162000446565b92915050565b600080604083850312156200049157620004906200040d565b5b6000620004a18582860162000460565b9250506020620004b48582860162000460565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054057607f821691505b602082108103620005565762000555620004f8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000581565b620005cc868362000581565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000619620006136200060d84620005e4565b620005ee565b620005e4565b9050919050565b6000819050919050565b6200063583620005f8565b6200064d620006448262000620565b8484546200058e565b825550505050565b600090565b6200066462000655565b620006718184846200062a565b505050565b5b8181101562000699576200068d6000826200065a565b60018101905062000677565b5050565b601f821115620006e857620006b2816200055c565b620006bd8462000571565b81016020851015620006cd578190505b620006e5620006dc8562000571565b83018262000676565b50505b505050565b600082821c905092915050565b60006200070d60001984600802620006ed565b1980831691505092915050565b6000620007288383620006fa565b9150826002028217905092915050565b6200074382620004be565b67ffffffffffffffff8111156200075f576200075e620004c9565b5b6200076b825462000527565b620007788282856200069d565b600060209050601f831160018114620007b057600084156200079b578287015190505b620007a785826200071a565b86555062000817565b601f198416620007c0866200055c565b60005b82811015620007ea57848901518255600182019150602085019450602081019050620007c3565b868310156200080a578489015162000806601f891682620006fa565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620008ad578086048111156200088557620008846200081f565b5b6001851615620008955780820291505b8081029050620008a5856200084e565b945062000865565b94509492505050565b600082620008c857600190506200099b565b81620008d857600090506200099b565b8160018114620008f15760028114620008fc5762000932565b60019150506200099b565b60ff8411156200091157620009106200081f565b5b8360020a9150848211156200092b576200092a6200081f565b5b506200099b565b5060208310610133831016604e8410600b84101617156200096c5782820a9050838111156200096657620009656200081f565b5b6200099b565b6200097b84848460016200085b565b925090508184048111156200099557620009946200081f565b5b81810290505b9392505050565b600060ff82169050919050565b6000620009bc82620005e4565b9150620009c983620009a2565b9250620009f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008b6565b905092915050565b600062000a0d82620005e4565b915062000a1a83620005e4565b925082820262000a2a81620005e4565b9150828204841483151762000a445762000a436200081f565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a94601f8362000a4b565b915062000aa18262000a5c565b602082019050919050565b6000602082019050818103600083015262000ac78162000a85565b9050919050565b600062000adb82620005e4565b915062000ae883620005e4565b925082820190508082111562000b035762000b026200081f565b5b92915050565b62000b1481620005e4565b82525050565b600060208201905062000b31600083018462000b09565b92915050565b611c8b8062000b476000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063a457c2d711610071578063a457c2d714610325578063a8aa1b3114610355578063a9059cbb14610373578063dd62ed3e146103a3578063f2fde38b146103d35761012c565b8063715018a6146102a55780638187f516146102af578063880fc14c146102cb5780638da5cb5b146102e957806395d89b41146103075761012c565b8063313ce567116100f4578063313ce567146101eb578063395093511461020957806362c040db14610239578063667c80a31461025757806370a08231146102755761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d57806326cb2257146101cd575b600080fd5b6101396103ef565b6040516101469190611344565b60405180910390f35b610169600480360381019061016491906113ff565b610481565b604051610176919061145a565b60405180910390f35b61018761049f565b6040516101949190611484565b60405180910390f35b6101b760048036038101906101b2919061149f565b6104a9565b6040516101c4919061145a565b60405180910390f35b6101d56105a1565b6040516101e29190611484565b60405180910390f35b6101f36105a6565b604051610200919061150e565b60405180910390f35b610223600480360381019061021e91906113ff565b6105af565b604051610230919061145a565b60405180910390f35b61024161065b565b60405161024e9190611538565b60405180910390f35b61025f610681565b60405161026c9190611538565b60405180910390f35b61028f600480360381019061028a9190611553565b6106a7565b60405161029c9190611484565b60405180910390f35b6102ad6106ef565b005b6102c960048036038101906102c49190611553565b610777565b005b6102d3610837565b6040516102e09190611484565b60405180910390f35b6102f161083c565b6040516102fe9190611538565b60405180910390f35b61030f610866565b60405161031c9190611344565b60405180910390f35b61033f600480360381019061033a91906113ff565b6108f8565b60405161034c919061145a565b60405180910390f35b61035d6109e3565b60405161036a9190611538565b60405180910390f35b61038d600480360381019061038891906113ff565b610a09565b60405161039a919061145a565b60405180910390f35b6103bd60048036038101906103b89190611580565b610a27565b6040516103ca9190611484565b60405180910390f35b6103ed60048036038101906103e89190611553565b610aae565b005b6060600380546103fe906115ef565b80601f016020809104026020016040519081016040528092919081815260200182805461042a906115ef565b80156104775780601f1061044c57610100808354040283529160200191610477565b820191906000526020600020905b81548152906001019060200180831161045a57829003601f168201915b5050505050905090565b600061049561048e610ba5565b8484610bad565b6001905092915050565b6000600254905090565b60006104b6848484610d76565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610501610ba5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057890611692565b60405180910390fd5b6105958561058d610ba5565b858403610bad565b60019150509392505050565b600181565b60006012905090565b60006106516105bc610ba5565b8484600160006105ca610ba5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461064c91906116e1565b610bad565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106f7610ba5565b73ffffffffffffffffffffffffffffffffffffffff1661071561083c565b73ffffffffffffffffffffffffffffffffffffffff161461076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290611761565b60405180910390fd5b6107756000610f65565b565b61077f610ba5565b73ffffffffffffffffffffffffffffffffffffffff1661079d61083c565b73ffffffffffffffffffffffffffffffffffffffff16146107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90611761565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600181565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610875906115ef565b80601f01602080910402602001604051908101604052809291908181526020018280546108a1906115ef565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b60008060016000610907610ba5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb906117f3565b60405180910390fd5b6109d86109cf610ba5565b85858403610bad565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610a1d610a16610ba5565b8484610d76565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ab6610ba5565b73ffffffffffffffffffffffffffffffffffffffff16610ad461083c565b73ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190611761565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9090611885565b60405180910390fd5b610ba281610f65565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390611917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906119a9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d699190611484565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e875760006064600183610e3291906119c9565b610e3c9190611a3a565b9050610e6b84600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361102b565b610e8184848385610e7c9190611a6b565b61102b565b50610f4f565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f425760006064600183610eed91906119c9565b610ef79190611a3a565b9050610f2684600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361102b565b610f3c84848385610f379190611a6b565b61102b565b50610f4e565b610f4d83838361102b565b5b5b610f60565b610f5f83838361102b565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190611b11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090611ba3565b60405180910390fd5b6111148383836112aa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190611c35565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122d91906116e1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112919190611484565b60405180910390a36112a48484846112af565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112ee5780820151818401526020810190506112d3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611316826112b4565b61132081856112bf565b93506113308185602086016112d0565b611339816112fa565b840191505092915050565b6000602082019050818103600083015261135e818461130b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113968261136b565b9050919050565b6113a68161138b565b81146113b157600080fd5b50565b6000813590506113c38161139d565b92915050565b6000819050919050565b6113dc816113c9565b81146113e757600080fd5b50565b6000813590506113f9816113d3565b92915050565b6000806040838503121561141657611415611366565b5b6000611424858286016113b4565b9250506020611435858286016113ea565b9150509250929050565b60008115159050919050565b6114548161143f565b82525050565b600060208201905061146f600083018461144b565b92915050565b61147e816113c9565b82525050565b60006020820190506114996000830184611475565b92915050565b6000806000606084860312156114b8576114b7611366565b5b60006114c6868287016113b4565b93505060206114d7868287016113b4565b92505060406114e8868287016113ea565b9150509250925092565b600060ff82169050919050565b611508816114f2565b82525050565b600060208201905061152360008301846114ff565b92915050565b6115328161138b565b82525050565b600060208201905061154d6000830184611529565b92915050565b60006020828403121561156957611568611366565b5b6000611577848285016113b4565b91505092915050565b6000806040838503121561159757611596611366565b5b60006115a5858286016113b4565b92505060206115b6858286016113b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061160757607f821691505b60208210810361161a576116196115c0565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061167c6028836112bf565b915061168782611620565b604082019050919050565b600060208201905081810360008301526116ab8161166f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116ec826113c9565b91506116f7836113c9565b925082820190508082111561170f5761170e6116b2565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061174b6020836112bf565b915061175682611715565b602082019050919050565b6000602082019050818103600083015261177a8161173e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006117dd6025836112bf565b91506117e882611781565b604082019050919050565b6000602082019050818103600083015261180c816117d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061186f6026836112bf565b915061187a82611813565b604082019050919050565b6000602082019050818103600083015261189e81611862565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006119016024836112bf565b915061190c826118a5565b604082019050919050565b60006020820190508181036000830152611930816118f4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006119936022836112bf565b915061199e82611937565b604082019050919050565b600060208201905081810360008301526119c281611986565b9050919050565b60006119d4826113c9565b91506119df836113c9565b92508282026119ed816113c9565b91508282048414831517611a0457611a036116b2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a45826113c9565b9150611a50836113c9565b925082611a6057611a5f611a0b565b5b828204905092915050565b6000611a76826113c9565b9150611a81836113c9565b9250828203905081811115611a9957611a986116b2565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611afb6025836112bf565b9150611b0682611a9f565b604082019050919050565b60006020820190508181036000830152611b2a81611aee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b8d6023836112bf565b9150611b9882611b31565b604082019050919050565b60006020820190508181036000830152611bbc81611b80565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611c1f6026836112bf565b9150611c2a82611bc3565b604082019050919050565b60006020820190508181036000830152611c4e81611c12565b905091905056fea2646970667358221220f54702fa3880c94ce44e2e741bdabeb9f7e367e56b85968777a2ac6861cd8e9b64736f6c634300081200330000000000000000000000009d6b009d09a57da08895e532b95a8b22382f30aa0000000000000000000000009d6b009d09a57da08895e532b95a8b22382f30aa