608060405260405180602001604052806000815250600b90805190602001906200002b929190620001dc565b5066d529ae9e860000600d55612710600e556000600f60006101000a81548160ff0219169083151502179055503480156200006557600080fd5b506040518060400160405280600b81526020017f4879706520486970706f730000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f48797065486970706f73000000000000000000000000000000000000000000008152508160009080519060200190620000ea929190620001dc565b50806001908051906020019062000103929190620001dc565b505050600062000118620001d460201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062093a8042620001c891906200028c565b600c8190555062000387565b600033905090565b828054620001ea90620002f3565b90600052602060002090601f0160209004810192826200020e57600085556200025a565b82601f106200022957805160ff19168380011785556200025a565b828001600101855582156200025a579182015b82811115620002595782518255916020019190600101906200023c565b5b5090506200026991906200026d565b5090565b5b80821115620002885760008160009055506001016200026e565b5090565b60006200029982620002e9565b9150620002a683620002e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620002de57620002dd62000329565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200030c57607f821691505b6020821081141562000323576200032262000358565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614a6080620003976000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063c87b56dd116100ab578063e98665501161006f578063e9866550146107e6578063eb8d2444146107fd578063f2fde38b14610828578063f4a0a52814610851578063ff1b65561461087a57610225565b8063c87b56dd146106ed578063cb774d471461072a578063d031370b14610755578063e36d64981461077e578063e985e9c5146107a957610225565b80638da5cb5b116100f25780638da5cb5b1461062957806395d89b4114610654578063a0712d681461067f578063a22cb4651461069b578063b88d4fde146106c457610225565b806370a0823114610581578063715018a6146105be5780637d17fcbe146105d55780638462151c146105ec57610225565b806323b872dd116101b157806342842e0e1161017557806342842e0e1461048a5780634f6ccce7146104b357806355f804b3146104f05780636352211e14610519578063676dd5631461055657610225565b806323b872dd146103cb5780632f745c59146103f457806332cb6b0c1461043157806334918dfd1461045c5780633ccfd60b1461047357610225565b8063081812fc116101f8578063081812fc146102e6578063095ea7b314610323578063109695231461034c57806318160ddd1461037557806318e20a38146103a057610225565b8063018a2c371461022a57806301ffc9a714610253578063020b39cc1461029057806306fdde03146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061360d565b6108a5565b005b34801561025f57600080fd5b5061027a6004803603810190610275919061357a565b61092b565b6040516102879190613ba3565b60405180910390f35b34801561029c57600080fd5b506102a56109a5565b6040516102b29190613f00565b60405180910390f35b3480156102c757600080fd5b506102d06109aa565b6040516102dd9190613bbe565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061360d565b610a3c565b60405161031a9190613b1a565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061353e565b610ac1565b005b34801561035857600080fd5b50610373600480360381019061036e91906135cc565b610bd9565b005b34801561038157600080fd5b5061038a610c6f565b6040516103979190613f00565b60405180910390f35b3480156103ac57600080fd5b506103b5610c7c565b6040516103c29190613f00565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613438565b610c82565b005b34801561040057600080fd5b5061041b6004803603810190610416919061353e565b610ce2565b6040516104289190613f00565b60405180910390f35b34801561043d57600080fd5b50610446610d87565b6040516104539190613f00565b60405180910390f35b34801561046857600080fd5b50610471610d8d565b005b34801561047f57600080fd5b50610488610e35565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613438565b610f07565b005b3480156104bf57600080fd5b506104da60048036038101906104d5919061360d565b610f27565b6040516104e79190613f00565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906135cc565b610fbe565b005b34801561052557600080fd5b50610540600480360381019061053b919061360d565b611054565b60405161054d9190613b1a565b60405180910390f35b34801561056257600080fd5b5061056b611106565b6040516105789190613f00565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906133d3565b61110c565b6040516105b59190613f00565b60405180910390f35b3480156105ca57600080fd5b506105d36111c4565b005b3480156105e157600080fd5b506105ea611301565b005b3480156105f857600080fd5b50610613600480360381019061060e91906133d3565b6113cb565b6040516106209190613b81565b60405180910390f35b34801561063557600080fd5b5061063e611547565b60405161064b9190613b1a565b60405180910390f35b34801561066057600080fd5b50610669611571565b6040516106769190613bbe565b60405180910390f35b6106996004803603810190610694919061360d565b611603565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613502565b611830565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613487565b6119b1565b005b3480156106f957600080fd5b50610714600480360381019061070f919061360d565b611a13565b6040516107219190613bbe565b60405180910390f35b34801561073657600080fd5b5061073f611b86565b60405161074c9190613f00565b60405180910390f35b34801561076157600080fd5b5061077c6004803603810190610777919061360d565b611b8c565b005b34801561078a57600080fd5b50610793611c4c565b6040516107a09190613f00565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb91906133fc565b611c52565b6040516107dd9190613ba3565b60405180910390f35b3480156107f257600080fd5b506107fb611ce6565b005b34801561080957600080fd5b50610812611df7565b60405161081f9190613ba3565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a91906133d3565b611e0a565b005b34801561085d57600080fd5b506108786004803603810190610873919061360d565b611fb6565b005b34801561088657600080fd5b5061088f61203c565b60405161089c9190613bbe565b60405180910390f35b6108ad6120ca565b73ffffffffffffffffffffffffffffffffffffffff166108cb611547565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890613de0565b60405180910390fd5b80600c8190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099e575061099d826120d2565b5b9050919050565b601481565b6060600080546109b9906141e9565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906141e9565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b5050505050905090565b6000610a47826121b4565b610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613dc0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610acc82611054565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613e40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5c6120ca565b73ffffffffffffffffffffffffffffffffffffffff161480610b8b5750610b8a81610b856120ca565b611c52565b5b610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190613d00565b60405180910390fd5b610bd48383612220565b505050565b610be16120ca565b73ffffffffffffffffffffffffffffffffffffffff16610bff611547565b73ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90613de0565b60405180910390fd5b80600b9080519060200190610c6b9291906131f7565b5050565b6000600880549050905090565b600c5481565b610c93610c8d6120ca565b826122d9565b610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990613e80565b60405180910390fd5b610cdd8383836123b7565b505050565b6000610ced8361110c565b8210610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613c00565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b610d956120ca565b73ffffffffffffffffffffffffffffffffffffffff16610db3611547565b73ffffffffffffffffffffffffffffffffffffffff1614610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613de0565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610e3d6120ca565b73ffffffffffffffffffffffffffffffffffffffff16610e5b611547565b73ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613de0565b60405180910390fd5b6000479050610ebe6120ca565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f03573d6000803e3d6000fd5b5050565b610f22838383604051806020016040528060008152506119b1565b505050565b6000610f31610c6f565b8210610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990613ea0565b60405180910390fd5b60088281548110610fac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610fc66120ca565b73ffffffffffffffffffffffffffffffffffffffff16610fe4611547565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103190613de0565b60405180910390fd5b80601290805190602001906110509291906131f7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613d40565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490613d20565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111cc6120ca565b73ffffffffffffffffffffffffffffffffffffffff166111ea611547565b73ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113096120ca565b73ffffffffffffffffffffffffffffffffffffffff16611327611547565b73ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490613de0565b60405180910390fd5b6000601154146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990613ce0565b60405180910390fd5b43601081905550565b606060006113d88361110c565b9050600081141561145b57600067ffffffffffffffff811115611424577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114525781602001602082028036833780820191505090505b50915050611542565b60008167ffffffffffffffff81111561149d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114cb5781602001602082028036833780820191505090505b50905060005b8281101561153b576114e38582610ce2565b82828151811061151c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806115339061424c565b9150506114d1565b5080925050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611580906141e9565b80601f01602080910402602001604051908101604052809291908181526020018280546115ac906141e9565b80156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b5050505050905090565b600f60009054906101000a900460ff16611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990613ee0565b60405180910390fd5b60008111611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90613be0565b60405180910390fd5b600e546116b2826116a4610c6f565b61261590919063ffffffff16565b11156116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90613d80565b60405180910390fd5b6116fb611547565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117c9576014811115611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613ec0565b60405180910390fd5b3461178782600d5461262b90919063ffffffff16565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90613d60565b60405180910390fd5b5b60005b818110156117f8576117e5336117e0610c6f565b612641565b80806117f09061424c565b9150506117cc565b5060006010541480156118205750600e54611811610c6f565b148061181f5750600c544210155b5b1561182d57436010819055505b50565b6118386120ca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613ca0565b60405180910390fd5b80600560006118b36120ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119606120ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a59190613ba3565b60405180910390a35050565b6119c26119bc6120ca565b836122d9565b611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890613e80565b60405180910390fd5b611a0d8484848461265f565b50505050565b6060611a1e826121b4565b611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613e20565b60405180910390fd5b6000601360008481526020019081526020016000208054611a7d906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa9906141e9565b8015611af65780601f10611acb57610100808354040283529160200191611af6565b820191906000526020600020905b815481529060010190602001808311611ad957829003601f168201915b505050505090506000611b076126bb565b9050600081511415611b1d578192505050611b81565b600082511115611b52578082604051602001611b3a929190613af6565b60405160208183030381529060405292505050611b81565b80611b5c8561274d565b604051602001611b6d929190613af6565b604051602081830303815290604052925050505b919050565b60115481565b611b946120ca565b73ffffffffffffffffffffffffffffffffffffffff16611bb2611547565b73ffffffffffffffffffffffffffffffffffffffff1614611c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff90613de0565b60405180910390fd5b6000611c12610c6f565b905060005b82811015611c4757611c34338284611c2f919061401e565b612641565b8080611c3f9061424c565b915050611c17565b505050565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060115414611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613ce0565b60405180910390fd5b60006010541415611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890613e60565b60405180910390fd5b600e546010544060001c611d859190614295565b60118190555060ff611da2601054436128fa90919063ffffffff16565b1115611dcd57600e54600143611db891906140ff565b4060001c611dc69190614295565b6011819055505b60006011541415611df557611dee600160115461261590919063ffffffff16565b6011819055505b565b600f60009054906101000a900460ff1681565b611e126120ca565b73ffffffffffffffffffffffffffffffffffffffff16611e30611547565b73ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90613c40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fbe6120ca565b73ffffffffffffffffffffffffffffffffffffffff16611fdc611547565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990613de0565b60405180910390fd5b80600d8190555050565b600b8054612049906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612075906141e9565b80156120c25780601f10612097576101008083540402835291602001916120c2565b820191906000526020600020905b8154815290600101906020018083116120a557829003601f168201915b505050505081565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121ad57506121ac82612910565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229383611054565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e4826121b4565b612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90613cc0565b60405180910390fd5b600061232e83611054565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239d57508373ffffffffffffffffffffffffffffffffffffffff1661238584610a3c565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ae57506123ad8185611c52565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123d782611054565b73ffffffffffffffffffffffffffffffffffffffff161461242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490613e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490613c80565b60405180910390fd5b6124aa838383600161297a565b6124b5600082612220565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250591906140ff565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255c919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612623919061401e565b905092915050565b6000818361263991906140a5565b905092915050565b61265b828260405180602001604052806000815250612aa4565b5050565b61266a8484846123b7565b61267684848484612aff565b6126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613c20565b60405180910390fd5b50505050565b6060601280546126ca906141e9565b80601f01602080910402602001604051908101604052809291908181526020018280546126f6906141e9565b80156127435780601f1061271857610100808354040283529160200191612743565b820191906000526020600020905b81548152906001019060200180831161272657829003601f168201915b5050505050905090565b60606000821415612795576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128f5565b600082905060005b600082146127c75780806127b09061424c565b915050600a826127c09190614074565b915061279d565b60008167ffffffffffffffff811115612809577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561283b5781602001600182028036833780820191505090505b5090505b600085146128ee5760018261285491906140ff565b9150600a856128639190614295565b603061286f919061401e565b60f81b8183815181106128ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128e79190614074565b945061283f565b8093505050505b919050565b6000818361290891906140ff565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61298684848484612c96565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129c9576129c482612c9c565b612a08565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612a0757612a068483612ce5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612a415750805b15612a5457612a4f82612e52565b612a9e565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a8d5750805b15612a9d57612a9c8383612f95565b5b5b50505050565b612aae8383613014565b612abb6000848484612aff565b612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190613c20565b60405180910390fd5b505050565b6000612b208473ffffffffffffffffffffffffffffffffffffffff166131e4565b15612c89578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b496120ca565b8786866040518563ffffffff1660e01b8152600401612b6b9493929190613b35565b602060405180830381600087803b158015612b8557600080fd5b505af1925050508015612bb657506040513d601f19601f82011682018060405250810190612bb391906135a3565b60015b612c39573d8060008114612be6576040519150601f19603f3d011682016040523d82523d6000602084013e612beb565b606091505b50600081511415612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613c20565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c8e565b600190505b949350505050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cf28461110c565b612cfc91906140ff565b9050600060076000848152602001908152602001600020549050818114612de1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e6691906140ff565b9050600060096000848152602001908152602001600020549050600060088381548110612ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612f04577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612fa08361110c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307b90613da0565b60405180910390fd5b61308d816121b4565b156130cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c490613c60565b60405180910390fd5b6130db60008383600161297a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461312b919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613203906141e9565b90600052602060002090601f016020900481019282613225576000855561326c565b82601f1061323e57805160ff191683800117855561326c565b8280016001018555821561326c579182015b8281111561326b578251825591602001919060010190613250565b5b509050613279919061327d565b5090565b5b8082111561329657600081600090555060010161327e565b5090565b60006132ad6132a884613f40565b613f1b565b9050828152602081018484840111156132c557600080fd5b6132d08482856141a7565b509392505050565b60006132eb6132e684613f71565b613f1b565b90508281526020810184848401111561330357600080fd5b61330e8482856141a7565b509392505050565b600081359050613325816149ce565b92915050565b60008135905061333a816149e5565b92915050565b60008135905061334f816149fc565b92915050565b600081519050613364816149fc565b92915050565b600082601f83011261337b57600080fd5b813561338b84826020860161329a565b91505092915050565b600082601f8301126133a557600080fd5b81356133b58482602086016132d8565b91505092915050565b6000813590506133cd81614a13565b92915050565b6000602082840312156133e557600080fd5b60006133f384828501613316565b91505092915050565b6000806040838503121561340f57600080fd5b600061341d85828601613316565b925050602061342e85828601613316565b9150509250929050565b60008060006060848603121561344d57600080fd5b600061345b86828701613316565b935050602061346c86828701613316565b925050604061347d868287016133be565b9150509250925092565b6000806000806080858703121561349d57600080fd5b60006134ab87828801613316565b94505060206134bc87828801613316565b93505060406134cd878288016133be565b925050606085013567ffffffffffffffff8111156134ea57600080fd5b6134f68782880161336a565b91505092959194509250565b6000806040838503121561351557600080fd5b600061352385828601613316565b92505060206135348582860161332b565b9150509250929050565b6000806040838503121561355157600080fd5b600061355f85828601613316565b9250506020613570858286016133be565b9150509250929050565b60006020828403121561358c57600080fd5b600061359a84828501613340565b91505092915050565b6000602082840312156135b557600080fd5b60006135c384828501613355565b91505092915050565b6000602082840312156135de57600080fd5b600082013567ffffffffffffffff8111156135f857600080fd5b61360484828501613394565b91505092915050565b60006020828403121561361f57600080fd5b600061362d848285016133be565b91505092915050565b60006136428383613ad8565b60208301905092915050565b61365781614133565b82525050565b600061366882613fb2565b6136728185613fe0565b935061367d83613fa2565b8060005b838110156136ae5781516136958882613636565b97506136a083613fd3565b925050600181019050613681565b5085935050505092915050565b6136c481614145565b82525050565b60006136d582613fbd565b6136df8185613ff1565b93506136ef8185602086016141b6565b6136f881614382565b840191505092915050565b600061370e82613fc8565b6137188185614002565b93506137288185602086016141b6565b61373181614382565b840191505092915050565b600061374782613fc8565b6137518185614013565b93506137618185602086016141b6565b80840191505092915050565b600061377a603383614002565b915061378582614393565b604082019050919050565b600061379d602b83614002565b91506137a8826143e2565b604082019050919050565b60006137c0603283614002565b91506137cb82614431565b604082019050919050565b60006137e3602683614002565b91506137ee82614480565b604082019050919050565b6000613806601c83614002565b9150613811826144cf565b602082019050919050565b6000613829602483614002565b9150613834826144f8565b604082019050919050565b600061384c601983614002565b915061385782614547565b602082019050919050565b600061386f602c83614002565b915061387a82614570565b604082019050919050565b6000613892601d83614002565b915061389d826145bf565b602082019050919050565b60006138b5603883614002565b91506138c0826145e8565b604082019050919050565b60006138d8602a83614002565b91506138e382614637565b604082019050919050565b60006138fb602983614002565b915061390682614686565b604082019050919050565b600061391e601d83614002565b9150613929826146d5565b602082019050919050565b6000613941602083614002565b915061394c826146fe565b602082019050919050565b6000613964602083614002565b915061396f82614727565b602082019050919050565b6000613987602c83614002565b915061399282614750565b604082019050919050565b60006139aa602083614002565b91506139b58261479f565b602082019050919050565b60006139cd602983614002565b91506139d8826147c8565b604082019050919050565b60006139f0602f83614002565b91506139fb82614817565b604082019050919050565b6000613a13602183614002565b9150613a1e82614866565b604082019050919050565b6000613a36602083614002565b9150613a41826148b5565b602082019050919050565b6000613a59603183614002565b9150613a64826148de565b604082019050919050565b6000613a7c602c83614002565b9150613a878261492d565b604082019050919050565b6000613a9f601783614002565b9150613aaa8261497c565b602082019050919050565b6000613ac2602083614002565b9150613acd826149a5565b602082019050919050565b613ae18161419d565b82525050565b613af08161419d565b82525050565b6000613b02828561373c565b9150613b0e828461373c565b91508190509392505050565b6000602082019050613b2f600083018461364e565b92915050565b6000608082019050613b4a600083018761364e565b613b57602083018661364e565b613b646040830185613ae7565b8181036060830152613b7681846136ca565b905095945050505050565b60006020820190508181036000830152613b9b818461365d565b905092915050565b6000602082019050613bb860008301846136bb565b92915050565b60006020820190508181036000830152613bd88184613703565b905092915050565b60006020820190508181036000830152613bf98161376d565b9050919050565b60006020820190508181036000830152613c1981613790565b9050919050565b60006020820190508181036000830152613c39816137b3565b9050919050565b60006020820190508181036000830152613c59816137d6565b9050919050565b60006020820190508181036000830152613c79816137f9565b9050919050565b60006020820190508181036000830152613c998161381c565b9050919050565b60006020820190508181036000830152613cb98161383f565b9050919050565b60006020820190508181036000830152613cd981613862565b9050919050565b60006020820190508181036000830152613cf981613885565b9050919050565b60006020820190508181036000830152613d19816138a8565b9050919050565b60006020820190508181036000830152613d39816138cb565b9050919050565b60006020820190508181036000830152613d59816138ee565b9050919050565b60006020820190508181036000830152613d7981613911565b9050919050565b60006020820190508181036000830152613d9981613934565b9050919050565b60006020820190508181036000830152613db981613957565b9050919050565b60006020820190508181036000830152613dd98161397a565b9050919050565b60006020820190508181036000830152613df98161399d565b9050919050565b60006020820190508181036000830152613e19816139c0565b9050919050565b60006020820190508181036000830152613e39816139e3565b9050919050565b60006020820190508181036000830152613e5981613a06565b9050919050565b60006020820190508181036000830152613e7981613a29565b9050919050565b60006020820190508181036000830152613e9981613a4c565b9050919050565b60006020820190508181036000830152613eb981613a6f565b9050919050565b60006020820190508181036000830152613ed981613a92565b9050919050565b60006020820190508181036000830152613ef981613ab5565b9050919050565b6000602082019050613f156000830184613ae7565b92915050565b6000613f25613f36565b9050613f31828261421b565b919050565b6000604051905090565b600067ffffffffffffffff821115613f5b57613f5a614353565b5b613f6482614382565b9050602081019050919050565b600067ffffffffffffffff821115613f8c57613f8b614353565b5b613f9582614382565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140298261419d565b91506140348361419d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614069576140686142c6565b5b828201905092915050565b600061407f8261419d565b915061408a8361419d565b92508261409a576140996142f5565b5b828204905092915050565b60006140b08261419d565b91506140bb8361419d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140f4576140f36142c6565b5b828202905092915050565b600061410a8261419d565b91506141158361419d565b925082821015614128576141276142c6565b5b828203905092915050565b600061413e8261417d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141d45780820151818401526020810190506141b9565b838111156141e3576000848401525b50505050565b6000600282049050600182168061420157607f821691505b6020821081141561421557614214614324565b5b50919050565b61422482614382565b810181811067ffffffffffffffff8211171561424357614242614353565b5b80604052505050565b60006142578261419d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561428a576142896142c6565b5b600182019050919050565b60006142a08261419d565b91506142ab8361419d565b9250826142bb576142ba6142f5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e74206163636f756e7420657863656564206d6178000000000000000000600082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6149d781614133565b81146149e257600080fd5b50565b6149ee81614145565b81146149f957600080fd5b50565b614a0581614151565b8114614a1057600080fd5b50565b614a1c8161419d565b8114614a2757600080fd5b5056fea2646970667358221220806ddc4f0077f6a93b71bb7fa26372735d6d7f47a7b26b298882af42279b10ac64736f6c63430008040033