60806040526064600c5566470de4df820000600d556001600e60006101000a81548160ff0219169083151502179055507313f58543fd794c88221cc75f23e72541027aa3bd600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739dd990f772b482c8e984936408514c032d85d47c600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000e657600080fd5b50604051620056e1380380620056e183398181016040528101906200010c919062000f75565b6040518060400160405280600b81526020017f446f7065205368696261730000000000000000000000000000000000000000008152506040518060400160405280600981526020017f444f50455348494241000000000000000000000000000000000000000000000081525081600090805190602001906200019092919062000e10565b508060019080519060200190620001a992919062000e10565b5050506000620001be620002df60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200026e81620002e760201b60201c565b620002a3600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006200039260201b60201c565b620002d8600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200039260201b60201c565b506200156b565b600033905090565b620002f7620002df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031d620003b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000376576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036d906200128f565b60405180910390fd5b80600b90805190602001906200038e92919062000e10565b5050565b620003b4828260405180602001604052806000815250620003e260201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003f483836200045060201b60201c565b6200040960008484846200063660201b60201c565b6200044b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004429062001207565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ba906200126d565b60405180910390fd5b620004d481620007f060201b60201c565b1562000517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050e9062001229565b60405180910390fd5b6200052b600083836200085c60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200057d919062001345565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006648473ffffffffffffffffffffffffffffffffffffffff16620009a360201b62001a171760201c565b15620007e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000696620002df60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006ba9493929190620011b3565b602060405180830381600087803b158015620006d557600080fd5b505af19250505080156200070957506040513d601f19601f8201168201806040525081019062000706919062000f49565b60015b62000792573d80600081146200073c576040519150601f19603f3d011682016040523d82523d6000602084013e62000741565b606091505b506000815114156200078a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007819062001207565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007e8565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000874838383620009b660201b62001a2a1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008c157620008bb81620009bb60201b60201c565b62000909565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009085762000907838262000a0460201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200095657620009508162000b8160201b60201c565b6200099e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200099d576200099c828262000cc960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a1e8462000d5560201b62000e1a1760201c565b62000a2a9190620013a2565b905060006007600084815260200190815260200160002054905081811462000b10576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b979190620013a2565b905060006009600084815260200190815260200160002054905060006008838154811062000bee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000c37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000cad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000ce18362000d5560201b62000e1a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dc0906200124b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e1e906200147d565b90600052602060002090601f01602090048101928262000e42576000855562000e8e565b82601f1062000e5d57805160ff191683800117855562000e8e565b8280016001018555821562000e8e579182015b8281111562000e8d57825182559160200191906001019062000e70565b5b50905062000e9d919062000ea1565b5090565b5b8082111562000ebc57600081600090555060010162000ea2565b5090565b600062000ed762000ed184620012e5565b620012b1565b90508281526020810184848401111562000ef057600080fd5b62000efd84828562001447565b509392505050565b60008151905062000f168162001551565b92915050565b600082601f83011262000f2e57600080fd5b815162000f4084826020860162000ec0565b91505092915050565b60006020828403121562000f5c57600080fd5b600062000f6c8482850162000f05565b91505092915050565b60006020828403121562000f8857600080fd5b600082015167ffffffffffffffff81111562000fa357600080fd5b62000fb18482850162000f1c565b91505092915050565b62000fc581620013dd565b82525050565b600062000fd88262001318565b62000fe4818562001323565b935062000ff681856020860162001447565b620010018162001540565b840191505092915050565b60006200101b60328362001334565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062001083601c8362001334565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000620010c5602a8362001334565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006200112d60208362001334565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006200116f60208362001334565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b620011ad816200143d565b82525050565b6000608082019050620011ca600083018762000fba565b620011d9602083018662000fba565b620011e86040830185620011a2565b8181036060830152620011fc818462000fcb565b905095945050505050565b6000602082019050818103600083015262001222816200100c565b9050919050565b60006020820190508181036000830152620012448162001074565b9050919050565b600060208201905081810360008301526200126681620010b6565b9050919050565b6000602082019050818103600083015262001288816200111e565b9050919050565b60006020820190508181036000830152620012aa8162001160565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620012db57620012da62001511565b5b8060405250919050565b600067ffffffffffffffff82111562001303576200130262001511565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001352826200143d565b91506200135f836200143d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013975762001396620014b3565b5b828201905092915050565b6000620013af826200143d565b9150620013bc836200143d565b925082821015620013d257620013d1620014b3565b5b828203905092915050565b6000620013ea826200141d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620014675780820151818401526020810190506200144a565b8381111562001477576000848401525b50505050565b600060028204905060018216806200149657607f821691505b60208210811415620014ad57620014ac620014e2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200155c81620013f1565b81146200156857600080fd5b50565b614166806200157b6000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec57806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd146105ee578063ca8001441461062b578063e985e9c514610654578063f2fde38b14610691576101b7565b806398d5fdca14610571578063a22cb4651461059c578063b88d4fde146105c5576101b7565b80638588b2c5116100c65780638588b2c5146104d65780638da5cb5b146104f257806391b7f5ed1461051d57806395d89b4114610546576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612e93565b6106ba565b6040516101f0919061394b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612e6a565b610734565b005b34801561022e57600080fd5b506102376107cd565b6040516102449190613966565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612f26565b61085f565b60405161028191906138c2565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612e2e565b6108e4565b005b3480156102bf57600080fd5b506102c86109fc565b6040516102d5919061394b565b60405180910390f35b3480156102ea57600080fd5b506102f3610a0f565b6040516103009190613c68565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612d28565b610a1c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612e2e565b610a7c565b6040516103669190613c68565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612d28565b610b21565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612cc3565b610b41565b6040516103cc9190613929565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612f26565b610c3b565b6040516104099190613c68565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612ee5565b610cd2565b005b34801561044757600080fd5b50610462600480360381019061045d9190612f26565b610d68565b60405161046f91906138c2565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612cc3565b610e1a565b6040516104ac9190613c68565b60405180910390f35b3480156104c157600080fd5b506104ca610ed2565b005b6104d461100f565b005b6104f060048036038101906104eb9190612f26565b61115f565b005b3480156104fe57600080fd5b506105076112e2565b60405161051491906138c2565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612f26565b61130c565b005b34801561055257600080fd5b5061055b611392565b6040516105689190613966565b60405180910390f35b34801561057d57600080fd5b50610586611424565b6040516105939190613c68565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190612df2565b61142e565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190612d77565b6115af565b005b3480156105fa57600080fd5b5061061560048036038101906106109190612f26565b611611565b6040516106229190613966565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612e2e565b6116b8565b005b34801561066057600080fd5b5061067b60048036038101906106769190612cec565b6117d7565b604051610688919061394b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612cc3565b61186b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d575061072c82611a2f565b5b9050919050565b61073c611b11565b73ffffffffffffffffffffffffffffffffffffffff1661075a6112e2565b73ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790613b88565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546107dc90613f5b565b80601f016020809104026020016040519081016040528092919081815260200182805461080890613f5b565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a82611b19565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613b68565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095790613be8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f611b11565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a8611b11565b6117d7565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490613ae8565b60405180910390fd5b6109f78383611b85565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a2d610a27611b11565b82611c3e565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613c28565b60405180910390fd5b610a77838383611d1c565b505050565b6000610a8783610e1a565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906139a8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3c838383604051806020016040528060008152506115af565b505050565b60606000610b4e83610e1a565b905060008167ffffffffffffffff811115610b92577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bc05781602001602082028036833780820191505090505b50905060005b82811015610c3057610bd88582610a7c565b828281518110610c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c2890613f8d565b915050610bc6565b508092505050919050565b6000610c45610a0f565b8210610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d90613c48565b60405180910390fd5b60088281548110610cc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610cda611b11565b73ffffffffffffffffffffffffffffffffffffffff16610cf86112e2565b73ffffffffffffffffffffffffffffffffffffffff1614610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590613b88565b60405180910390fd5b80600b9080519060200190610d64929190612ae7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613b28565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613b08565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eda611b11565b73ffffffffffffffffffffffffffffffffffffffff16610ef86112e2565b73ffffffffffffffffffffffffffffffffffffffff1614610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613b88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611017611b11565b73ffffffffffffffffffffffffffffffffffffffff166110356112e2565b73ffffffffffffffffffffffffffffffffffffffff161461108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290613b88565b60405180910390fd5b600060024761109a9190613de6565b9050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110fc57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061115c57600080fd5b50565b6000611169610a0f565b9050600e60009054906101000a900460ff16156111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613988565b60405180910390fd5b601582106111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613a88565b60405180910390fd5b600c5461271061120e9190613e71565b828261121a9190613d90565b1061125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613ac8565b60405180910390fd5b81600d546112689190613e17565b3410156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613c08565b60405180910390fd5b60005b828110156112dd576112ca3382846112c59190613d90565b611f78565b80806112d590613f8d565b9150506112ad565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611314611b11565b73ffffffffffffffffffffffffffffffffffffffff166113326112e2565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90613b88565b60405180910390fd5b80600d8190555050565b6060600180546113a190613f5b565b80601f01602080910402602001604051908101604052809291908181526020018280546113cd90613f5b565b801561141a5780601f106113ef5761010080835404028352916020019161141a565b820191906000526020600020905b8154815290600101906020018083116113fd57829003601f168201915b5050505050905090565b6000600d54905090565b611436611b11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613a68565b60405180910390fd5b80600560006114b1611b11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661155e611b11565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115a3919061394b565b60405180910390a35050565b6115c06115ba611b11565b83611c3e565b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613c28565b60405180910390fd5b61160b84848484611f96565b50505050565b606061161c82611b19565b61165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613bc8565b60405180910390fd5b6000611665611ff2565b9050600081511161168557604051806020016040528060008152506116b0565b8061168f84612084565b6040516020016116a092919061389e565b6040516020818303038152906040525b915050919050565b6116c0611b11565b73ffffffffffffffffffffffffffffffffffffffff166116de6112e2565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90613b88565b60405180910390fd5b600c54811115611779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177090613a08565b60405180910390fd5b6000611783610a0f565b905060005b828110156117b8576117a58482846117a09190613d90565b611f78565b80806117b090613f8d565b915050611788565b5081600c60008282546117cb9190613e71565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611873611b11565b73ffffffffffffffffffffffffffffffffffffffff166118916112e2565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613b88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906139e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611afa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b0a5750611b0982612231565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bf883610d68565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c4982611b19565b611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90613aa8565b60405180910390fd5b6000611c9383610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d0257508373ffffffffffffffffffffffffffffffffffffffff16611cea8461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d135750611d1281856117d7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d3c82610d68565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990613ba8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990613a48565b60405180910390fd5b611e0d83838361229b565b611e18600082611b85565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e689190613e71565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ebf9190613d90565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f928282604051806020016040528060008152506123af565b5050565b611fa1848484611d1c565b611fad8484848461240a565b611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906139c8565b60405180910390fd5b50505050565b6060600b805461200190613f5b565b80601f016020809104026020016040519081016040528092919081815260200182805461202d90613f5b565b801561207a5780601f1061204f5761010080835404028352916020019161207a565b820191906000526020600020905b81548152906001019060200180831161205d57829003601f168201915b5050505050905090565b606060008214156120cc576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061222c565b600082905060005b600082146120fe5780806120e790613f8d565b915050600a826120f79190613de6565b91506120d4565b60008167ffffffffffffffff811115612140577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121725781602001600182028036833780820191505090505b5090505b600085146122255760018261218b9190613e71565b9150600a8561219a9190613fd6565b60306121a69190613d90565b60f81b8183815181106121e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561221e9190613de6565b9450612176565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122a6838383611a2a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122e9576122e4816125a1565b612328565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123275761232683826125ea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236b5761236681612757565b6123aa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123a9576123a8828261289a565b5b5b505050565b6123b98383612919565b6123c6600084848461240a565b612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc906139c8565b60405180910390fd5b505050565b600061242b8473ffffffffffffffffffffffffffffffffffffffff16611a17565b15612594578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612454611b11565b8786866040518563ffffffff1660e01b815260040161247694939291906138dd565b602060405180830381600087803b15801561249057600080fd5b505af19250505080156124c157506040513d601f19601f820116820180604052508101906124be9190612ebc565b60015b612544573d80600081146124f1576040519150601f19603f3d011682016040523d82523d6000602084013e6124f6565b606091505b5060008151141561253c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612533906139c8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612599565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125f784610e1a565b6126019190613e71565b90506000600760008481526020019081526020016000205490508181146126e6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061276b9190613e71565b90506000600960008481526020019081526020016000205490506000600883815481106127c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612809577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061287e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128a583610e1a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090613b48565b60405180910390fd5b61299281611b19565b156129d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c990613a28565b60405180910390fd5b6129de6000838361229b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2e9190613d90565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612af390613f5b565b90600052602060002090601f016020900481019282612b155760008555612b5c565b82601f10612b2e57805160ff1916838001178555612b5c565b82800160010185558215612b5c579182015b82811115612b5b578251825591602001919060010190612b40565b5b509050612b699190612b6d565b5090565b5b80821115612b86576000816000905550600101612b6e565b5090565b6000612b9d612b9884613cb4565b613c83565b905082815260208101848484011115612bb557600080fd5b612bc0848285613f19565b509392505050565b6000612bdb612bd684613ce4565b613c83565b905082815260208101848484011115612bf357600080fd5b612bfe848285613f19565b509392505050565b600081359050612c15816140d4565b92915050565b600081359050612c2a816140eb565b92915050565b600081359050612c3f81614102565b92915050565b600081519050612c5481614102565b92915050565b600082601f830112612c6b57600080fd5b8135612c7b848260208601612b8a565b91505092915050565b600082601f830112612c9557600080fd5b8135612ca5848260208601612bc8565b91505092915050565b600081359050612cbd81614119565b92915050565b600060208284031215612cd557600080fd5b6000612ce384828501612c06565b91505092915050565b60008060408385031215612cff57600080fd5b6000612d0d85828601612c06565b9250506020612d1e85828601612c06565b9150509250929050565b600080600060608486031215612d3d57600080fd5b6000612d4b86828701612c06565b9350506020612d5c86828701612c06565b9250506040612d6d86828701612cae565b9150509250925092565b60008060008060808587031215612d8d57600080fd5b6000612d9b87828801612c06565b9450506020612dac87828801612c06565b9350506040612dbd87828801612cae565b925050606085013567ffffffffffffffff811115612dda57600080fd5b612de687828801612c5a565b91505092959194509250565b60008060408385031215612e0557600080fd5b6000612e1385828601612c06565b9250506020612e2485828601612c1b565b9150509250929050565b60008060408385031215612e4157600080fd5b6000612e4f85828601612c06565b9250506020612e6085828601612cae565b9150509250929050565b600060208284031215612e7c57600080fd5b6000612e8a84828501612c1b565b91505092915050565b600060208284031215612ea557600080fd5b6000612eb384828501612c30565b91505092915050565b600060208284031215612ece57600080fd5b6000612edc84828501612c45565b91505092915050565b600060208284031215612ef757600080fd5b600082013567ffffffffffffffff811115612f1157600080fd5b612f1d84828501612c84565b91505092915050565b600060208284031215612f3857600080fd5b6000612f4684828501612cae565b91505092915050565b6000612f5b8383613880565b60208301905092915050565b612f7081613ea5565b82525050565b6000612f8182613d24565b612f8b8185613d52565b9350612f9683613d14565b8060005b83811015612fc7578151612fae8882612f4f565b9750612fb983613d45565b925050600181019050612f9a565b5085935050505092915050565b612fdd81613eb7565b82525050565b6000612fee82613d2f565b612ff88185613d63565b9350613008818560208601613f28565b613011816140c3565b840191505092915050565b600061302782613d3a565b6130318185613d74565b9350613041818560208601613f28565b61304a816140c3565b840191505092915050565b600061306082613d3a565b61306a8185613d85565b935061307a818560208601613f28565b80840191505092915050565b6000613093600b83613d74565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b60006130d3602b83613d74565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613139603283613d74565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061319f602683613d74565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613205601b83613d74565b91507f457863656564732072657365727665642043617420737570706c7900000000006000830152602082019050919050565b6000613245601c83613d74565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613285602483613d74565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132eb601983613d74565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061332b602483613d74565b91507f596f752063616e2061646f70742061206d6178696d756d206f6620323020536860008301527f69626173000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613391602c83613d74565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006133f7601d83613d74565b91507f45786365656473206d6178696d756d2053686962617320737570706c790000006000830152602082019050919050565b6000613437603883613d74565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061349d602a83613d74565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613503602983613d74565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613569602083613d74565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006135a9602c83613d74565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061360f602083613d74565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061364f602983613d74565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136b5602f83613d74565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061371b602183613d74565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613781601983613d74565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b60006137c1603183613d74565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613827602c83613d74565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b61388981613f0f565b82525050565b61389881613f0f565b82525050565b60006138aa8285613055565b91506138b68284613055565b91508190509392505050565b60006020820190506138d76000830184612f67565b92915050565b60006080820190506138f26000830187612f67565b6138ff6020830186612f67565b61390c604083018561388f565b818103606083015261391e8184612fe3565b905095945050505050565b600060208201905081810360008301526139438184612f76565b905092915050565b60006020820190506139606000830184612fd4565b92915050565b60006020820190508181036000830152613980818461301c565b905092915050565b600060208201905081810360008301526139a181613086565b9050919050565b600060208201905081810360008301526139c1816130c6565b9050919050565b600060208201905081810360008301526139e18161312c565b9050919050565b60006020820190508181036000830152613a0181613192565b9050919050565b60006020820190508181036000830152613a21816131f8565b9050919050565b60006020820190508181036000830152613a4181613238565b9050919050565b60006020820190508181036000830152613a6181613278565b9050919050565b60006020820190508181036000830152613a81816132de565b9050919050565b60006020820190508181036000830152613aa18161331e565b9050919050565b60006020820190508181036000830152613ac181613384565b9050919050565b60006020820190508181036000830152613ae1816133ea565b9050919050565b60006020820190508181036000830152613b018161342a565b9050919050565b60006020820190508181036000830152613b2181613490565b9050919050565b60006020820190508181036000830152613b41816134f6565b9050919050565b60006020820190508181036000830152613b618161355c565b9050919050565b60006020820190508181036000830152613b818161359c565b9050919050565b60006020820190508181036000830152613ba181613602565b9050919050565b60006020820190508181036000830152613bc181613642565b9050919050565b60006020820190508181036000830152613be1816136a8565b9050919050565b60006020820190508181036000830152613c018161370e565b9050919050565b60006020820190508181036000830152613c2181613774565b9050919050565b60006020820190508181036000830152613c41816137b4565b9050919050565b60006020820190508181036000830152613c618161381a565b9050919050565b6000602082019050613c7d600083018461388f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613caa57613ca9614094565b5b8060405250919050565b600067ffffffffffffffff821115613ccf57613cce614094565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613cff57613cfe614094565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d9b82613f0f565b9150613da683613f0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ddb57613dda614007565b5b828201905092915050565b6000613df182613f0f565b9150613dfc83613f0f565b925082613e0c57613e0b614036565b5b828204905092915050565b6000613e2282613f0f565b9150613e2d83613f0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6657613e65614007565b5b828202905092915050565b6000613e7c82613f0f565b9150613e8783613f0f565b925082821015613e9a57613e99614007565b5b828203905092915050565b6000613eb082613eef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f46578082015181840152602081019050613f2b565b83811115613f55576000848401525b50505050565b60006002820490506001821680613f7357607f821691505b60208210811415613f8757613f86614065565b5b50919050565b6000613f9882613f0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fcb57613fca614007565b5b600182019050919050565b6000613fe182613f0f565b9150613fec83613f0f565b925082613ffc57613ffb614036565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6140dd81613ea5565b81146140e857600080fd5b50565b6140f481613eb7565b81146140ff57600080fd5b50565b61410b81613ec3565b811461411657600080fd5b50565b61412281613f0f565b811461412d57600080fd5b5056fea264697066735822122010d0153a3358f9893d7a36d5fe5e6bbfabbba1d466308e55200e7e92f891777e64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f7777772e646f70657368696261732e66756e2f6170692f646f67732f00000000000000000000000000000000000000000000000000000000