60806040523480156200001157600080fd5b506040516200595138038062005951833981018060405281019080805182019291906020018051820192919060200180519060200190929190805190602001909291908051906020019092919050505084848484604080519081016040528060001515815260200160001515815250600360008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083151502179055509050506000811115156200013e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f546f74616c20737570706c79206d75737420626520706f73697469766500000081525060200191505060405180910390fd5b83600890805190602001906200015692919062000769565b5082600990805190602001906200016f92919062000769565b5081600a60006101000a81548160ff021916908360ff16021790555080600b81905550600b54600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3505050506200025e33620002b7640100000000026401000000009004565b620002783362000321640100000000026401000000009004565b62000292336200038b640100000000026401000000009004565b620002ac81620004c3640100000000026401000000009004565b505050505062000818565b620002db816005620005b7640100000000026200502c179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167fe5471443dacef43f16d651e9c89638c8b115a4f9c6cbe09df93e544cb8f8fe3d60405160405180910390a250565b62000345816000620005b7640100000000026200502c179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b620003a5336200067a640100000000026401000000009004565b80620003c75750620003c633620006a7640100000000026401000000009004565b5b15156200043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8262fb5649658d13750c637c2e39e8bcf867e37da89997c6a1e6f2dea6e975ed60405160405180910390a250565b620004dd336200067a640100000000026401000000009004565b80620004ff5750620004fe33620006a7640100000000026401000000009004565b5b151562000574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b806012819055507f285ed4cab839e54405276e9e5f06f35f2f12e1d626384e4632854919077f7c7a6012546040518082815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620005f457600080fd5b6200060f8282620006d4640100000000026401000000009004565b1515156200061c57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000620006a0826000620006d46401000000000262003902179091906401000000009004565b9050919050565b6000620006cd826001620006d46401000000000262003902179091906401000000009004565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200071257600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007ac57805160ff1916838001178555620007dd565b82800160010185558215620007dd579182015b82811115620007dc578251825591602001919060010190620007bf565b5b509050620007ec9190620007f0565b5090565b6200081591905b8082111562000811576000816000905550600101620007f7565b5090565b90565b61512980620008286000396000f300608060405260043610610293576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610298578063095ea7b31461032857806313c3e4091461038d5780631785f53c146103d057806318160ddd146104135780631d0e8a4d1461043e5780631e89d5451461049957806323b872dd1461055a57806324d7806c146105df578063251c1aa31461063a57806325db64c014610665578063313ce567146106a85780633192d50a146106d9578063380a75bf1461071c578063395093511461075f5780633af32abf146107c45780633f4ba83a1461081f5780634000aea01461083657806340abfe26146108e157806341e26b751461092457806345c8b1a61461097557806346d0fbde146109b8578063551530d614610a0f57806358b8bbaa14610a6a5780635c975abb14610aad578063642f314414610adc57806364e5fe4f14610b1f5780636e34a89814610b765780637048027514610bb957806370a0823114610bfc57806378fbb04f14610c535780638456cb5914610c9657806389cf785a14610cad5780638ab1d68114610cf05780638d1fdf2f14610d3357806395d89b4114610d76578063987ee15614610e06578063a457c2d714610e65578063a75d525414610eca578063a9059cbb14610f0d578063ae1ccf2c14610f72578063bc9ac68c14610fa1578063cb31b6cd14610ffc578063ce531ff1146110dd578063cfa936f814611120578063dace455714611171578063dd62ed3e1461119e578063de1be3c214611215578063e19e43491461127b578063e43252d714611292578063e5839836146112d5578063e662bd0f14611330578063f1eddfd51461138f578063f45b3e6c146113f5578063f7af4a30146114ee575b600080fd5b3480156102a457600080fd5b506102ad611549565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ed5780820151818401526020810190506102d2565b50505050905090810190601f16801561031a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033457600080fd5b50610373600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115e7565b604051808215151515815260200191505060405180910390f35b34801561039957600080fd5b506103ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f0565b005b3480156103dc57600080fd5b50610411600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611753565b005b34801561041f57600080fd5b5061042861180b565b6040518082815260200191505060405180910390f35b34801561044a57600080fd5b5061047f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611815565b604051808215151515815260200191505060405180910390f35b3480156104a557600080fd5b506105406004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611832565b604051808215151515815260200191505060405180910390f35b34801561056657600080fd5b506105c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061185a565b604051808215151515815260200191505060405180910390f35b3480156105eb57600080fd5b50610620600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611965565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b5061064f611982565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b506106a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611988565b005b3480156106b457600080fd5b506106bd611a21565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106e557600080fd5b5061071a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a34565b005b34801561072857600080fd5b5061075d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b3e565b005b34801561076b57600080fd5b506107aa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf6565b604051808215151515815260200191505060405180910390f35b3480156107d057600080fd5b50610805600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cff565b604051808215151515815260200191505060405180910390f35b34801561082b57600080fd5b50610834611d1c565b005b34801561084257600080fd5b506108c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611e74565b604051808215151515815260200191505060405180910390f35b3480156108ed57600080fd5b50610922600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209a565b005b34801561093057600080fd5b50610973600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506120ba565b005b34801561098157600080fd5b506109b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612155565b005b3480156109c457600080fd5b506109cd6121ee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a1b57600080fd5b50610a50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612214565b604051808215151515815260200191505060405180910390f35b348015610a7657600080fd5b50610aab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612231565b005b348015610ab957600080fd5b50610ac2612345565b604051808215151515815260200191505060405180910390f35b348015610ae857600080fd5b50610b1d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061235f565b005b348015610b2b57600080fd5b50610b346123f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8257600080fd5b50610bb7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061241e565b005b348015610bc557600080fd5b50610bfa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612532565b005b348015610c0857600080fd5b50610c3d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ea565b6040518082815260200191505060405180910390f35b348015610c5f57600080fd5b50610c94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612633565b005b348015610ca257600080fd5b50610cab6126cc565b005b348015610cb957600080fd5b50610cee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612789565b005b348015610cfc57600080fd5b50610d31600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127ec565b005b348015610d3f57600080fd5b50610d74600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612885565b005b348015610d8257600080fd5b50610d8b61291e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dcb578082015181840152602081019050610db0565b50505050905090810190601f168015610df85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e1257600080fd5b50610e47600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129bc565b60405180826000191660001916815260200191505060405180910390f35b348015610e7157600080fd5b50610eb0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129d9565b604051808215151515815260200191505060405180910390f35b348015610ed657600080fd5b50610f0b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae2565b005b348015610f1957600080fd5b50610f58600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b45565b604051808215151515815260200191505060405180910390f35b348015610f7e57600080fd5b50610f87612c4e565b604051808215151515815260200191505060405180910390f35b348015610fad57600080fd5b50610fe2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c83565b604051808215151515815260200191505060405180910390f35b34801561100857600080fd5b506110c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612ca0565b604051808215151515815260200191505060405180910390f35b3480156110e957600080fd5b5061111e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cca565b005b34801561112c57600080fd5b5061116f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050612d63565b005b34801561117d57600080fd5b5061119c60048036038101908080359060200190929190505050612e60565b005b3480156111aa57600080fd5b506111ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f30565b6040518082815260200191505060405180910390f35b34801561122157600080fd5b5061127960048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612fb7565b005b34801561128757600080fd5b506112906130fe565b005b34801561129e57600080fd5b506112d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613109565b005b3480156112e157600080fd5b50611316600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131a2565b604051808215151515815260200191505060405180910390f35b34801561133c57600080fd5b50611371600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131bf565b60405180826000191660001916815260200191505060405180910390f35b34801561139b57600080fd5b506113f3600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506131dc565b005b34801561140157600080fd5b506114ac600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050613323565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114fa57600080fd5b5061152f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136cf565b604051808215151515815260200191505060405180910390f35b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115df5780601f106115b4576101008083540402835291602001916115df565b820191906000526020600020905b8154815290600101906020018083116115c257829003601f168201915b505050505081565b60006012544211806115fe57506115fd33611965565b5b8061160e575061160d336136cf565b5b8061161e575061161d33611cff565b5b15156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f4d7573742062652077686974656c69737465642c2061646d696e2c206f72206181526020017f74746f726e6579207768656e2074686520636f6e7472616374206973206c6f6381526020017f6b6564000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b6116e883836136ec565b905092915050565b6116f933612c83565b151561170457600080fd5b61170d8161384e565b8073ffffffffffffffffffffffffffffffffffffffff167fd1150a5bd2b0e9576d0be9aca2590fe10d79688e2026d41c3eeaa22d72bba1c460405160405180910390a250565b61175c33611965565b8061176c575061176b336136cf565b5b15156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600360000160009054906101000a900460ff161515156117ff57600080fd5b611808816138a8565b50565b6000600b54905090565b600061182b82600d61390290919063ffffffff16565b9050919050565b600061183d33612214565b151561184857600080fd5b6118528383613996565b905092915050565b6000601254421180611871575061187033611965565b5b806118815750611880336136cf565b5b80611891575061189033611cff565b5b1515611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f4d7573742062652077686974656c69737465642c2061646d696e2c206f72206181526020017f74746f726e6579207768656e2074686520636f6e7472616374206973206c6f6381526020017f6b6564000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b61195c848484613bc8565b90509392505050565b600061197b82600061390290919063ffffffff16565b9050919050565b60125481565b61199133611965565b806119a157506119a0336136cf565b5b1515611a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b611a1e81613d0e565b50565b600a60009054906101000a900460ff1681565b611a3d33611965565b80611a4d5750611a4c336136cf565b5b1515611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600360000160009054906101000a900460ff16151515611ae057600080fd5b611ae98161384e565b611af281612c83565b15611b3b578073ffffffffffffffffffffffffffffffffffffffff167fd1150a5bd2b0e9576d0be9aca2590fe10d79688e2026d41c3eeaa22d72bba1c460405160405180910390a25b50565b611b4733611965565b80611b575750611b56336136cf565b5b1515611bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600360000160009054906101000a900460ff16151515611bea57600080fd5b611bf381613d68565b50565b6000601254421180611c0d5750611c0c33611965565b5b80611c1d5750611c1c336136cf565b5b80611c2d5750611c2c33611cff565b5b1515611ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f4d7573742062652077686974656c69737465642c2061646d696e2c206f72206181526020017f74746f726e6579207768656e2074686520636f6e7472616374206973206c6f6381526020017f6b6564000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b611cf78383613dc2565b905092915050565b6000611d1582600461390290919063ffffffff16565b9050919050565b600360000160009054906101000a900460ff161515611d3a57600080fd5b611d43336136cf565b1515611e6a57611d5233611965565b1515611dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b611dce612c4e565b151515611e69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001807f4f6e6c79206174746f726e6579732063616e20756e706175736520616674657281526020017f20616e206174746f726e6579206861732070617573656400000000000000000081525060400191505060405180910390fd5b5b611e7261402e565b565b600080611e818585612b45565b508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d386866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611f19578082015181840152602081019050611efe565b50505050905090810190601f168015611f465780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611f5d856140cf565b1561208e578490508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed363386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561202757808201518184015260208101905061200c565b50505050905090810190601f1680156120545780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b505050505b60019150509392505050565b6120a333612c83565b15156120ae57600080fd5b6120b7816140e2565b50565b6120c333611965565b806120d357506120d2336136cf565b5b1515612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b612151828261413c565b5050565b61215e33611965565b8061216e575061216d336136cf565b5b15156121e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b6121eb816141ac565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061222a82600c61390290919063ffffffff16565b9050919050565b61223a33611965565b8061224a5750612249336136cf565b5b15156122be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8262fb5649658d13750c637c2e39e8bcf867e37da89997c6a1e6f2dea6e975ed60405160405180910390a250565b6000600360000160009054906101000a900460ff16905090565b61236833611965565b806123785750612377336136cf565b5b15156123ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b6123f581614206565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61242733611965565b806124375750612436336136cf565b5b15156124ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f395982654aef0b2dd340d01484ddccc8c67d011a179b72e24f3bb2224c19042960405160405180910390a250565b61253b33611965565b8061254b575061254a336136cf565b5b15156125bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600360000160009054906101000a900460ff161515156125de57600080fd5b6125e781614260565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61263c33611965565b8061264c575061264b336136cf565b5b15156126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b6126c9816142ba565b50565b6000600360000160009054906101000a900460ff161515156126ed57600080fd5b6126f6336136cf565b90508080612709575061270833611965565b5b151561277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b61278681614314565b50565b61279233612c83565b151561279d57600080fd5b6127a681613d68565b8073ffffffffffffffffffffffffffffffffffffffff167f31f2f473acc030385200df8dddbab6686d4287a2166d4fe59a1dc72e37c1d31260405160405180910390a250565b6127f533611965565b806128055750612804336136cf565b5b1515612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b612882816143c1565b50565b61288e33611965565b8061289e575061289d336136cf565b5b1515612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b61291b8161441b565b50565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129b45780601f10612989576101008083540402835291602001916129b4565b820191906000526020600020905b81548152906001019060200180831161299757829003601f168201915b505050505081565b60006129d282600f61447590919063ffffffff16565b9050919050565b60006012544211806129f057506129ef33611965565b5b80612a0057506129ff336136cf565b5b80612a105750612a0f33611cff565b5b1515612ad0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f4d7573742062652077686974656c69737465642c2061646d696e2c206f72206181526020017f74746f726e6579207768656e2074686520636f6e7472616374206973206c6f6381526020017f6b6564000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b612ada83836144fc565b905092915050565b612aeb33612c83565b1515612af657600080fd5b612aff816138a8565b8073ffffffffffffffffffffffffffffffffffffffff167fdd03a410a9b379c5c31df9bbec14f14840e84bec6958bba98d9c5df9fe4d713d60405160405180910390a250565b6000601254421180612b5c5750612b5b33611965565b5b80612b6c5750612b6b336136cf565b5b80612b7c5750612b7b33611cff565b5b1515612c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f4d7573742062652077686974656c69737465642c2061646d696e2c206f72206181526020017f74746f726e6579207768656e2074686520636f6e7472616374206973206c6f6381526020017f6b6564000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b612c468383614768565b905092915050565b6000600360000160009054906101000a900460ff168015612c7e5750600360000160019054906101000a900460ff165b905090565b6000612c9982600561390290919063ffffffff16565b9050919050565b6000612cab33612214565b1515612cb657600080fd5b612cc184848461479e565b90509392505050565b612cd333611965565b80612ce35750612ce2336136cf565b5b1515612d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b612d6081614af7565b50565b612d6c33611965565b80612d7c5750612d7b336136cf565b5b1515612df0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b612e068282600f614b519092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f0be941a21faebdc06d8e1830ca3140a65ac68ec7673cde293506627f125b15e98260405180826000191660001916815260200191505060405180910390a25050565b612e6933611965565b80612e795750612e78336136cf565b5b1515612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b806012819055507f285ed4cab839e54405276e9e5f06f35f2f12e1d626384e4632854919077f7c7a6012546040518082815260200191505060405180910390a150565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612fc233611965565b80612fd25750612fd1336136cf565b5b1515613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600082511115156130bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4163636f756e74206172726179206d757374206e6f7420626520656d7074790081525060200191505060405180910390fd5b600090505b81518110156130fa576130ed82828151811015156130de57fe5b9060200190602002015161441b565b80806001019150506130c4565b5050565b61310733614bdc565b565b61311233611965565b806131225750613121336136cf565b5b1515613196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b61319f81614c36565b50565b60006131b882600261390290919063ffffffff16565b9050919050565b60006131d582600e61447590919063ffffffff16565b9050919050565b60006131e733611965565b806131f757506131f6336136cf565b5b151561326b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d75737420626520616e2061646d696e206f72206174746f726e65790000000081525060200191505060405180910390fd5b600082511115156132e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4163636f756e74206172726179206d757374206e6f7420626520656d7074790081525060200191505060405180910390fd5b600090505b815181101561331f57613312828281518110151561330357fe5b906020019060200201516141ac565b80806001019150506132e9565b5050565b600080613352601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b45565b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663250e92238686601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633886040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b83811015613491578082015181840152602081019050613476565b50505050905090810190601f1680156134be5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b838110156134f75780820151818401526020810190506134dc565b50505050905090810190601f1680156135245780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561354857600080fd5b505af115801561355c573d6000803e3d6000fd5b505050506040513d602081101561357257600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe3b9fdf78f4b15108f0b621a319278356b29d3754063f215af72ae624f15bb90878787604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613621578082015181840152602081019050613606565b50505050905090810190601f16801561364e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561368757808201518184015260208101905061366c565b50505050905090810190601f1680156136b45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3809150509392505050565b60006136e582600161390290919063ffffffff16565b9050919050565b60006136f7336131a2565b15151561370357600080fd5b600360000160009054906101000a900460ff1615151561372257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561375e57600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b613862816001614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f4cd2f0d83974b1263c9e9add9fe8a4f7e85315f06221164c690d299fb70443d760405160405180910390a250565b6138bc816000614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561393f57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080600360000160009054906101000a900460ff161515156139b857600080fd5b60008451111515613a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f546f206172726179206d757374206e6f7420626520656d70747900000000000081525060200191505060405180910390fd5b83518351141515613aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f417272617973206d757374206265206f6620657175616c206c656e677468000081525060200191505060405180910390fd5b600090505b8351811015613bbd57613ad88482815181101515613ac957fe5b906020019060200201516131a2565b1515613b1c57613b17338583815181101515613af057fe5b906020019060200201518584815181101515613b0857fe5b90602001906020020151614d3f565b613bb0565b8381815181101515613b2a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f57b832b60cac2d336bd974f846b5d4c4af5aeeeb2dbd0f8cbd3ea89fc9078eea8584815181101515613b9057fe5b906020019060200201516040518082815260200191505060405180910390a35b8080600101915050613aaf565b600191505092915050565b6000600360000160009054906101000a900460ff16151515613be957600080fd5b613c7882600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500b90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d03848484614d3f565b600190509392505050565b613d2281600c614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fb08b79e928d8424dd9cace0a25124bced6309d6ee589d2ef4d35e9c8efaf631a60405160405180910390a250565b613d7c81600161502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f150675600847f5afb6f4e65c9012cccfa909e6cdae151f23823006414b9f118460405160405180910390a250565b6000613dcd336131a2565b151515613dd957600080fd5b600360000160009054906101000a900460ff16151515613df857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613e3457600080fd5b613ec382600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150dc90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600360000160006101000a81548160ff0219169083151502179055506000600360000160016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080823b905060008111915050919050565b6140f681600561502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe5471443dacef43f16d651e9c89638c8b115a4f9c6cbe09df93e544cb8f8fe3d60405160405180910390a250565b6141528282600e614b519092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f819eb20ba2a0727250b76809898fb432e6889e574980cad5fdc740e09d86487d8260405180826000191660001916815260200191505060405180910390a25050565b6141c0816002614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba60405160405180910390a250565b61421a81600d614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fd50d62b726467f70db12c0823c62ab5a8a5e5075539f68fdfa111b2e77f203e960405160405180910390a250565b61427481600061502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b6142ce81600d61502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f121731828b85b443d173e8dc86615a38927a5b1035349922533c0b02faa1103d60405160405180910390a250565b6001600360000160006101000a81548160ff02191690831515021790555080600360000160016101000a81548160ff0219169083151502179055507fe8699cf681560fd07de85543bd994263f4557bdc5179dd702f256d15fd083e1d3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a150565b6143d5816004614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b61442f81600261502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a491360405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156144b257600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000614507336131a2565b15151561451357600080fd5b600360000160009054906101000a900460ff1615151561453257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561456e57600080fd5b6145fd82600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500b90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600360000160009054906101000a900460ff1615151561478957600080fd5b614794338484614d3f565b6001905092915050565b600080600360000160009054906101000a900460ff161515156147c057600080fd5b60008451111515614839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f546f206172726179206d757374206e6f7420626520656d70747900000000000081525060200191505060405180910390fd5b835183511415156148b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f417272617973206d757374206265206f6620657175616c206c656e677468000081525060200191505060405180910390fd5b600090505b8351811015614aeb576148e084828151811015156148d157fe5b906020019060200201516131a2565b1515614a4a5761498c83828151811015156148f757fe5b90602001906020020151600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500b90919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a45858583815181101515614a1e57fe5b906020019060200201518584815181101515614a3657fe5b90602001906020020151614d3f565b614ade565b8381815181101515614a5857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f57b832b60cac2d336bd974f846b5d4c4af5aeeeb2dbd0f8cbd3ea89fc9078eea8584815181101515614abe57fe5b906020019060200201516040518082815260200191505060405180910390a35b80806001019150506148b7565b60019150509392505050565b614b0b81600c61502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0c64dd4cf45e6662b704cbd91ab2dc4c8e9fe31ccaa92774384605c04b1483f060405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614b8d57600080fd5b808360000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550505050565b614bf0816005614c9090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f4035d91020256e004a98d6a179f13602f5e859c5f0c874dd50eadaf3ea3034d160405160405180910390a250565b614c4a81600461502c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0360405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515614ccc57600080fd5b614cd68282613902565b1515614ce157600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614d7b57600080fd5b614d84836131a2565b151515614df9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f46726f6d206d757374206e6f742062652066726f7a656e00000000000000000081525060200191505060405180910390fd5b614e02826131a2565b151515614e77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f206d757374206e6f742062652066726f7a656e000000000000000000000081525060200191505060405180910390fd5b614ec981600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461500b90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f5e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150dc90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008083831115151561501d57600080fd5b82840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561506857600080fd5b6150728282613902565b15151561507e57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008082840190508381101515156150f357600080fd5b80915050929150505600a165627a7a72305820ead08fcadaedbfb5d3c329fc84dade36b8deef30879c79c71fdee08dbd98ffba002900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000004d8c55aefb8c05b5c000000000000000000000000000000000000000000000000000000000000005e166d00000000000000000000000000000000000000000000000000000000000000000c53686f70696e20546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453484f5000000000000000000000000000000000000000000000000000000000