60806040526040518060400160405280600681526020017f5379706865720000000000000000000000000000000000000000000000000000815250600090816200004a9190620003f7565b506040518060400160405280600681526020017f535950484552000000000000000000000000000000000000000000000000000081525060019081620000919190620003f7565b506012600260006101000a81548160ff021916908360ff160217905550600260009054906101000a900460ff1660ff16600a620000cf919062000661565b620f4240620000df9190620006b2565b600355348015620000ef57600080fd5b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600354600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620006fd565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ff57607f821691505b602082108103620002155762000214620001b7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000240565b6200028b868362000240565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002d8620002d2620002cc84620002a3565b620002ad565b620002a3565b9050919050565b6000819050919050565b620002f483620002b7565b6200030c6200030382620002df565b8484546200024d565b825550505050565b600090565b6200032362000314565b62000330818484620002e9565b505050565b5b8181101562000358576200034c60008262000319565b60018101905062000336565b5050565b601f821115620003a75762000371816200021b565b6200037c8462000230565b810160208510156200038c578190505b620003a46200039b8562000230565b83018262000335565b50505b505050565b600082821c905092915050565b6000620003cc60001984600802620003ac565b1980831691505092915050565b6000620003e78383620003b9565b9150826002028217905092915050565b62000402826200017d565b67ffffffffffffffff8111156200041e576200041d62000188565b5b6200042a8254620001e6565b620004378282856200035c565b600060209050601f8311600181146200046f57600084156200045a578287015190505b620004668582620003d9565b865550620004d6565b601f1984166200047f866200021b565b60005b82811015620004a95784890151825560018201915060208501945060208101905062000482565b86831015620004c95784890151620004c5601f891682620003b9565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200056c57808604811115620005445762000543620004de565b5b6001851615620005545780820291505b808102905062000564856200050d565b945062000524565b94509492505050565b6000826200058757600190506200065a565b816200059757600090506200065a565b8160018114620005b05760028114620005bb57620005f1565b60019150506200065a565b60ff841115620005d057620005cf620004de565b5b8360020a915084821115620005ea57620005e9620004de565b5b506200065a565b5060208310610133831016604e8410600b84101617156200062b5782820a905083811115620006255762000624620004de565b5b6200065a565b6200063a84848460016200051a565b92509050818404811115620006545762000653620004de565b5b81810290505b9392505050565b60006200066e82620002a3565b91506200067b83620002a3565b9250620006aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000575565b905092915050565b6000620006bf82620002a3565b9150620006cc83620002a3565b9250828202620006dc81620002a3565b91508282048414831517620006f657620006f5620004de565b5b5092915050565b611722806200070d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d71461024f578063a9059cbb1461027f578063dd62ed3e146102af578063f2fde38b146102df576100ea565b8063715018a6146102095780638da5cb5b1461021357806395d89b4114610231576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102fb565b604051610104919061115d565b60405180910390f35b61012760048036038101906101229190611218565b610389565b6040516101349190611273565b60405180910390f35b61014561047b565b604051610152919061129d565b60405180910390f35b610175600480360381019061017091906112b8565b610481565b6040516101829190611273565b60405180910390f35b610193610773565b6040516101a09190611327565b60405180910390f35b6101c360048036038101906101be9190611218565b610786565b6040516101d09190611273565b60405180910390f35b6101f360048036038101906101ee9190611342565b610906565b604051610200919061129d565b60405180910390f35b61021161091e565b005b61021b610a57565b604051610228919061137e565b60405180910390f35b610239610a7d565b604051610246919061115d565b60405180910390f35b61026960048036038101906102649190611218565b610b0b565b6040516102769190611273565b60405180910390f35b61029960048036038101906102949190611218565b610d4a565b6040516102a69190611273565b60405180910390f35b6102c960048036038101906102c49190611399565b610ee9565b6040516102d6919061129d565b60405180910390f35b6102f960048036038101906102f49190611342565b610f0e565b005b6000805461030890611408565b80601f016020809104026020016040519081016040528092919081815260200182805461033490611408565b80156103815780601f1061035657610100808354040283529160200191610381565b820191906000526020600020905b81548152906001019060200180831161036457829003601f168201915b505050505081565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610469919061129d565b60405180910390a36001905092915050565b60035481565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc90611485565b60405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb906114f1565b60405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106139190611540565b9250508190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106699190611574565b9250508190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106fc9190611540565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610760919061129d565b60405180910390a3600190509392505050565b600260009054906101000a900460ff1681565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108149190611574565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516108f4919061129d565b60405180910390a36001905092915050565b60046020528060005260406000206000915090505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906115f4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054610a8a90611408565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab690611408565b8015610b035780601f10610ad857610100808354040283529160200191610b03565b820191906000526020600020905b815481529060010190602001808311610ae657829003601f168201915b505050505081565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390611660565b60405180910390fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c589190611540565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051610d38919061129d565b60405180910390a36001905092915050565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590611485565b60405180910390fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e1d9190611540565b9250508190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e739190611574565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ed7919061129d565b60405180910390a36001905092915050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f95906115f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906116cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111075780820151818401526020810190506110ec565b60008484015250505050565b6000601f19601f8301169050919050565b600061112f826110cd565b61113981856110d8565b93506111498185602086016110e9565b61115281611113565b840191505092915050565b600060208201905081810360008301526111778184611124565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111af82611184565b9050919050565b6111bf816111a4565b81146111ca57600080fd5b50565b6000813590506111dc816111b6565b92915050565b6000819050919050565b6111f5816111e2565b811461120057600080fd5b50565b600081359050611212816111ec565b92915050565b6000806040838503121561122f5761122e61117f565b5b600061123d858286016111cd565b925050602061124e85828601611203565b9150509250929050565b60008115159050919050565b61126d81611258565b82525050565b60006020820190506112886000830184611264565b92915050565b611297816111e2565b82525050565b60006020820190506112b2600083018461128e565b92915050565b6000806000606084860312156112d1576112d061117f565b5b60006112df868287016111cd565b93505060206112f0868287016111cd565b925050604061130186828701611203565b9150509250925092565b600060ff82169050919050565b6113218161130b565b82525050565b600060208201905061133c6000830184611318565b92915050565b6000602082840312156113585761135761117f565b5b6000611366848285016111cd565b91505092915050565b611378816111a4565b82525050565b6000602082019050611393600083018461136f565b92915050565b600080604083850312156113b0576113af61117f565b5b60006113be858286016111cd565b92505060206113cf858286016111cd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061142057607f821691505b602082108103611433576114326113d9565b5b50919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061146f6014836110d8565b915061147a82611439565b602082019050919050565b6000602082019050818103600083015261149e81611462565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b60006114db6016836110d8565b91506114e6826114a5565b602082019050919050565b6000602082019050818103600083015261150a816114ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061154b826111e2565b9150611556836111e2565b925082820390508181111561156e5761156d611511565b5b92915050565b600061157f826111e2565b915061158a836111e2565b92508282019050808211156115a2576115a1611511565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b60006115de6017836110d8565b91506115e9826115a8565b602082019050919050565b6000602082019050818103600083015261160d816115d1565b9050919050565b7f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f0000600082015250565b600061164a601e836110d8565b915061165582611614565b602082019050919050565b600060208201905081810360008301526116798161163d565b9050919050565b7f4e6577206f776e6572206973206e6f7420612076616c69642061646472657373600082015250565b60006116b66020836110d8565b91506116c182611680565b602082019050919050565b600060208201905081810360008301526116e5816116a9565b905091905056fea264697066735822122096439109f79c1a64a41962f7fea282a4597ffacf73d236317bfe4e3500b5d38064736f6c63430008150033