60806040526040518060800160405280604381526020016200572060439139600b90816200002e919062000531565b503480156200003c57600080fd5b506040516200576338038062005763833981810160405281019062000062919062000682565b6040518060400160405280600781526020017f436c6f74686573000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f434c5400000000000000000000000000000000000000000000000000000000008152508160009081620000df919062000531565b508060019081620000f1919062000531565b505050620001096000801b836200015260201b60201c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620006c9565b6200016482826200024460201b60201c565b620002405760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001e5620002af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033957607f821691505b6020821081036200034f576200034e620002f1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200037a565b620003c586836200037a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004126200040c6200040684620003dd565b620003e7565b620003dd565b9050919050565b6000819050919050565b6200042e83620003f1565b620004466200043d8262000419565b84845462000387565b825550505050565b600090565b6200045d6200044e565b6200046a81848462000423565b505050565b5b8181101562000492576200048660008262000453565b60018101905062000470565b5050565b601f821115620004e157620004ab8162000355565b620004b6846200036a565b81016020851015620004c6578190505b620004de620004d5856200036a565b8301826200046f565b50505b505050565b600082821c905092915050565b60006200050660001984600802620004e6565b1980831691505092915050565b6000620005218383620004f3565b9150826002028217905092915050565b6200053c82620002b7565b67ffffffffffffffff811115620005585762000557620002c2565b5b62000564825462000320565b6200057182828562000496565b600060209050601f831160018114620005a9576000841562000594578287015190505b620005a0858262000513565b86555062000610565b601f198416620005b98662000355565b60005b82811015620005e357848901518255600182019150602085019450602081019050620005bc565b86831015620006035784890151620005ff601f891682620004f3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200064a826200061d565b9050919050565b6200065c816200063d565b81146200066857600080fd5b50565b6000815190506200067c8162000651565b92915050565b600080604083850312156200069c576200069b62000618565b5b6000620006ac858286016200066b565b9250506020620006bf858286016200066b565b9150509250929050565b61504780620006d96000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063527a5c6e1161011a57806395d89b41116100ad578063b9d77bfc1161007c578063b9d77bfc146105cc578063c497da8d146105e8578063c87b56dd14610618578063d547741f14610648578063e985e9c514610664576101fb565b806395d89b4114610558578063a217fddf14610576578063a22cb46514610594578063b88d4fde146105b0576101fb565b806370a08231116100e957806370a08231146104be5780638ae24fbf146104ee578063902d55a51461050a57806391d1485414610528576101fb565b8063527a5c6e14610426578063632cad5b146104425780636352211e1461045e5780636a6278421461048e576101fb565b80631ce69add116101925780632f2ff15d116101615780632f2ff15d146103b657806336568abe146103d257806342842e0e146103ee57806342966c681461040a576101fb565b80631ce69add146103325780631f73d1cd1461034e57806323b872dd1461036a578063248a9ca314610386576101fb565b8063081812fc116101ce578063081812fc1461029a578063095ea7b3146102ca578063136e00f4146102e65780631526e08714610316576101fb565b8063017a91051461020057806301e669721461023057806301ffc9a71461024c57806306fdde031461027c575b600080fd5b61021a600480360381019061021591906133d4565b610694565b6040516102279190613410565b60405180910390f35b61024a60048036038101906102459190613571565b6106ac565b005b61026660048036038101906102619190613612565b6107eb565b604051610273919061365a565b60405180910390f35b6102846107fd565b60405161029191906136f4565b60405180910390f35b6102b460048036038101906102af91906133d4565b61088f565b6040516102c19190613757565b60405180910390f35b6102e460048036038101906102df919061379e565b6108d5565b005b61030060048036038101906102fb91906133d4565b6109ec565b60405161030d9190613757565b60405180910390f35b610330600480360381019061032b91906137de565b610ac1565b005b61034c600480360381019061034791906137de565b610c5a565b005b6103686004803603810190610363919061386b565b610cea565b005b610384600480360381019061037f91906138b8565b610d4c565b005b6103a0600480360381019061039b9190613941565b610dac565b6040516103ad919061397d565b60405180910390f35b6103d060048036038101906103cb9190613998565b610dcc565b005b6103ec60048036038101906103e79190613998565b610ded565b005b610408600480360381019061040391906138b8565b610e70565b005b610424600480360381019061041f91906133d4565b610e90565b005b610440600480360381019061043b91906137de565b610eec565b005b61045c600480360381019061045791906137de565b610f3e565b005b610478600480360381019061047391906133d4565b610fce565b6040516104859190613757565b60405180910390f35b6104a860048036038101906104a391906137de565b611054565b6040516104b59190613410565b60405180910390f35b6104d860048036038101906104d391906137de565b6110eb565b6040516104e59190613410565b60405180910390f35b6105086004803603810190610503919061386b565b6111a2565b005b610512611204565b60405161051f9190613410565b60405180910390f35b610542600480360381019061053d9190613998565b611228565b60405161054f919061365a565b60405180910390f35b610560611293565b60405161056d91906136f4565b60405180910390f35b61057e611325565b60405161058b919061397d565b60405180910390f35b6105ae60048036038101906105a99190613a04565b61132c565b005b6105ca60048036038101906105c59190613ae5565b611342565b005b6105e660048036038101906105e19190613b68565b6113a4565b005b61060260048036038101906105fd91906137de565b61162d565b60405161060f9190613410565b60405180910390f35b610632600480360381019061062d91906133d4565b611645565b60405161063f91906136f4565b60405180910390f35b610662600480360381019061065d9190613998565b611688565b005b61067e60048036038101906106799190613ba8565b6116a9565b60405161068b919061365a565b60405180910390f35b600c6020528060005260406000206000915090505481565b6106b96000801b33611228565b6106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90613c34565b60405180910390fd5b6000600b805461070790613c83565b80601f016020809104026020016040519081016040528092919081815260200182805461073390613c83565b80156107805780601f1061075557610100808354040283529160200191610780565b820191906000526020600020905b81548152906001019060200180831161076357829003601f168201915b5050505050905081600b90816107969190613e60565b503373ffffffffffffffffffffffffffffffffffffffff167f52ba67bcb82cb6cd3485292bf69e1ff328977db8b85460354077a065a62e1bbf82846040516107df929190613f32565b60405180910390a25050565b60006107f68261173d565b9050919050565b60606000805461080c90613c83565b80601f016020809104026020016040519081016040528092919081815260200182805461083890613c83565b80156108855780601f1061085a57610100808354040283529160200191610885565b820191906000526020600020905b81548152906001019060200180831161086857829003601f168201915b5050505050905090565b600061089a826117b7565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e082610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790613fdb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096f611802565b73ffffffffffffffffffffffffffffffffffffffff16148061099e575061099d81610998611802565b6116a9565b5b6109dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d49061406d565b60405180910390fd5b6109e7838361180a565b505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e9bc536600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1646308760006040518663ffffffff1660e01b8152600401610a759594939291906140c8565b602060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab69190614130565b905080915050919050565b610ace6000801b33611228565b610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0490613c34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b73906141cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190614261565b60405180910390fd5b610bf76000801b826118c3565b610c046000801b82611228565b610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a906142cd565b60405180910390fd5b610c576000801b610c52611802565b610ded565b50565b610c676000801b33611228565b610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613c34565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cf76000801b33611228565b610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613c34565b60405180910390fd5b8181600e9190610d479291906132cd565b505050565b610d5d610d57611802565b826119a4565b610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d939061435f565b60405180910390fd5b610da7838383611a39565b505050565b600060066000838152602001908152602001600020600101549050919050565b610dd582610dac565b610dde81611d32565b610de883836118c3565b505050565b610df5611802565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e59906143f1565b60405180910390fd5b610e6c8282611d46565b5050565b610e8b83838360405180602001604052806000815250611342565b505050565b610ea1610e9b611802565b826119a4565b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed79061435f565b60405180910390fd5b610ee981611e28565b50565b6000801b610ef981611d32565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610f4b6000801b33611228565b610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613c34565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610fda83611eaa565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361104b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110429061445d565b60405180910390fd5b80915050919050565b6000806110616007611ee7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81106110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906144c9565b60405180910390fd5b6110cf8382611ef5565b6110d881612112565b6110e2600761227f565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111529061455b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111af6000801b33611228565b6111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590613c34565b60405180910390fd5b8181600f91906111ff9291906132cd565b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600180546112a290613c83565b80601f01602080910402602001604051908101604052809291908181526020018280546112ce90613c83565b801561131b5780601f106112f05761010080835404028352916020019161131b565b820191906000526020600020905b8154815290600101906020018083116112fe57829003601f168201915b5050505050905090565b6000801b81565b61133e611337611802565b8383612295565b5050565b61135361134d611802565b836119a4565b611392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113899061435f565b60405180910390fd5b61139e84848484612401565b50505050565b6113ad82610fce565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611411906145c7565b60405180910390fd5b60018114806114295750600281145b806114345750600381145b611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614633565b60405180910390fd5b60028103611542576000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f49061469f565b60405180910390fd5b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600181036116115781600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c29061470b565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600c6000848152602001908152602001600020819055505050565b600d6020528060005260406000206000915090505481565b6060611650826117b7565b600061165a61245d565b9050600061167c82611677600287611672919061475a565b6124ef565b6125bd565b90508092505050919050565b61169182610dac565b61169a81611d32565b6116a48383611d46565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117b057506117af82612601565b5b9050919050565b6117c0816126e3565b6117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f69061445d565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661187d83610fce565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6118cd8282611228565b6119a05760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611945611802565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806119b083610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119f257506119f181856116a9565b5b80611a3057508373ffffffffffffffffffffffffffffffffffffffff16611a188461088f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a5982610fce565b73ffffffffffffffffffffffffffffffffffffffff1614611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa6906147fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b159061488f565b60405180910390fd5b611b2b8383836001612724565b8273ffffffffffffffffffffffffffffffffffffffff16611b4b82610fce565b73ffffffffffffffffffffffffffffffffffffffff1614611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b98906147fd565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d2d838383600161272a565b505050565b611d4381611d3e611802565b612730565b50565b611d508282611228565b15611e245760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611dc9611802565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611e4882610fce565b73ffffffffffffffffffffffffffffffffffffffff1614611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e95906148fb565b60405180910390fd5b611ea7816127b5565b50565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614967565b60405180910390fd5b611f6d816126e3565b15611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa4906149d3565b60405180910390fd5b611fbb600083836001612724565b611fc4816126e3565b15612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb906149d3565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461210e60008383600161272a565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e9bc536600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1646308660006040518663ffffffff1660e01b815260040161219a9594939291906140c8565b602060405180830381865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db9190614130565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663156e29f682600161222b8660016009612903565b6040518463ffffffff1660e01b815260040161224993929190614a2e565b600060405180830381600087803b15801561226357600080fd5b505af1158015612277573d6000803e3d6000fd5b505050505050565b6001816000016000828254019250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614ab1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123f4919061365a565b60405180910390a3505050565b61240c848484611a39565b61241884848484612944565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e90614b43565b60405180910390fd5b50505050565b6060600b805461246c90613c83565b80601f016020809104026020016040519081016040528092919081815260200182805461249890613c83565b80156124e55780601f106124ba576101008083540402835291602001916124e5565b820191906000526020600020905b8154815290600101906020018083116124c857829003601f168201915b5050505050905090565b6060600060016124fe84612acb565b01905060008167ffffffffffffffff81111561251d5761251c613446565b5b6040519080825280601f01601f19166020018201604052801561254f5781602001600182028036833780820191505090505b509050600082602001820190505b6001156125b2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816125a6576125a561472b565b5b0494506000850361255d575b819350505050919050565b60606125f98383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250612c1e565b905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126cc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126dc57506126db82612f91565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661270583611eaa565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b61273a8282611228565b6127b15761274781612ffb565b6127558360001c6020613028565b604051602001612766929190614c37565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a891906136f4565b60405180910390fd5b5050565b60006127c082610fce565b90506127d0816000846001612724565b6127d982610fce565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128ff81600084600161272a565b5050565b600082600184846129149190614ca0565b61291e9190614cd4565b61292786613264565b612931919061475a565b61293b9190614cd4565b90509392505050565b60006129658473ffffffffffffffffffffffffffffffffffffffff166132aa565b15612abe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261298e611802565b8786866040518563ffffffff1660e01b81526004016129b09493929190614d5d565b6020604051808303816000875af19250505080156129ec57506040513d601f19601f820116820180604052508101906129e99190614dbe565b60015b612a6e573d8060008114612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b506000815103612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d90614b43565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ac3565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612b29577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612b1f57612b1e61472b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612b66576d04ee2d6d415b85acef81000000008381612b5c57612b5b61472b565b5b0492506020810190505b662386f26fc100008310612b9557662386f26fc100008381612b8b57612b8a61472b565b5b0492506010810190505b6305f5e1008310612bbe576305f5e1008381612bb457612bb361472b565b5b0492506008810190505b6127108310612be3576127108381612bd957612bd861472b565b5b0492506004810190505b60648310612c065760648381612bfc57612bfb61472b565b5b0492506002810190505b600a8310612c15576001810190505b80915050919050565b606060008690506000869050600086905060008690506000869050600081518351855187518951612c4f9190614cd4565b612c599190614cd4565b612c639190614cd4565b612c6d9190614cd4565b67ffffffffffffffff811115612c8657612c85613446565b5b6040519080825280601f01601f191660200182016040528015612cb85781602001600182028036833780820191505090505b50905060008190506000805b8851811015612d4c57888181518110612ce057612cdf614deb565b5b602001015160f81c60f81b838380612cf790614e1a565b945081518110612d0a57612d09614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612d4490614e1a565b915050612cc4565b5060005b8751811015612dd857878181518110612d6c57612d6b614deb565b5b602001015160f81c60f81b838380612d8390614e1a565b945081518110612d9657612d95614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612dd090614e1a565b915050612d50565b5060005b8651811015612e6457868181518110612df857612df7614deb565b5b602001015160f81c60f81b838380612e0f90614e1a565b945081518110612e2257612e21614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612e5c90614e1a565b915050612ddc565b5060005b8551811015612ef057858181518110612e8457612e83614deb565b5b602001015160f81c60f81b838380612e9b90614e1a565b945081518110612eae57612ead614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612ee890614e1a565b915050612e68565b5060005b8451811015612f7c57848181518110612f1057612f0f614deb565b5b602001015160f81c60f81b838380612f2790614e1a565b945081518110612f3a57612f39614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612f7490614e1a565b915050612ef4565b50819850505050505050505095945050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606130218273ffffffffffffffffffffffffffffffffffffffff16601460ff16613028565b9050919050565b60606000600283600261303b9190614e62565b6130459190614cd4565b67ffffffffffffffff81111561305e5761305d613446565b5b6040519080825280601f01601f1916602001820160405280156130905781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106130c8576130c7614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061312c5761312b614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261316c9190614e62565b6131769190614cd4565b90505b6001811115613216577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106131b8576131b7614deb565b5b1a60f81b8282815181106131cf576131ce614deb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061320f90614ea4565b9050613179565b506000841461325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190614f19565b60405180910390fd5b8091505092915050565b6000326001436132749190614ca0565b40428460405160200161328a9493929190614fc3565b6040516020818303038152906040528051906020012060001c9050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805482825590600052602060002090810192821561335c579160200282015b8281111561335b57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906132ed565b5b509050613369919061336d565b5090565b5b8082111561338657600081600090555060010161336e565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6133b18161339e565b81146133bc57600080fd5b50565b6000813590506133ce816133a8565b92915050565b6000602082840312156133ea576133e9613394565b5b60006133f8848285016133bf565b91505092915050565b61340a8161339e565b82525050565b60006020820190506134256000830184613401565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347e82613435565b810181811067ffffffffffffffff8211171561349d5761349c613446565b5b80604052505050565b60006134b061338a565b90506134bc8282613475565b919050565b600067ffffffffffffffff8211156134dc576134db613446565b5b6134e582613435565b9050602081019050919050565b82818337600083830152505050565b600061351461350f846134c1565b6134a6565b9050828152602081018484840111156135305761352f613430565b5b61353b8482856134f2565b509392505050565b600082601f8301126135585761355761342b565b5b8135613568848260208601613501565b91505092915050565b60006020828403121561358757613586613394565b5b600082013567ffffffffffffffff8111156135a5576135a4613399565b5b6135b184828501613543565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135ef816135ba565b81146135fa57600080fd5b50565b60008135905061360c816135e6565b92915050565b60006020828403121561362857613627613394565b5b6000613636848285016135fd565b91505092915050565b60008115159050919050565b6136548161363f565b82525050565b600060208201905061366f600083018461364b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136af578082015181840152602081019050613694565b60008484015250505050565b60006136c682613675565b6136d08185613680565b93506136e0818560208601613691565b6136e981613435565b840191505092915050565b6000602082019050818103600083015261370e81846136bb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061374182613716565b9050919050565b61375181613736565b82525050565b600060208201905061376c6000830184613748565b92915050565b61377b81613736565b811461378657600080fd5b50565b60008135905061379881613772565b92915050565b600080604083850312156137b5576137b4613394565b5b60006137c385828601613789565b92505060206137d4858286016133bf565b9150509250929050565b6000602082840312156137f4576137f3613394565b5b600061380284828501613789565b91505092915050565b600080fd5b600080fd5b60008083601f84011261382b5761382a61342b565b5b8235905067ffffffffffffffff8111156138485761384761380b565b5b60208301915083602082028301111561386457613863613810565b5b9250929050565b6000806020838503121561388257613881613394565b5b600083013567ffffffffffffffff8111156138a05761389f613399565b5b6138ac85828601613815565b92509250509250929050565b6000806000606084860312156138d1576138d0613394565b5b60006138df86828701613789565b93505060206138f086828701613789565b9250506040613901868287016133bf565b9150509250925092565b6000819050919050565b61391e8161390b565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60006020828403121561395757613956613394565b5b60006139658482850161392c565b91505092915050565b6139778161390b565b82525050565b6000602082019050613992600083018461396e565b92915050565b600080604083850312156139af576139ae613394565b5b60006139bd8582860161392c565b92505060206139ce85828601613789565b9150509250929050565b6139e18161363f565b81146139ec57600080fd5b50565b6000813590506139fe816139d8565b92915050565b60008060408385031215613a1b57613a1a613394565b5b6000613a2985828601613789565b9250506020613a3a858286016139ef565b9150509250929050565b600067ffffffffffffffff821115613a5f57613a5e613446565b5b613a6882613435565b9050602081019050919050565b6000613a88613a8384613a44565b6134a6565b905082815260208101848484011115613aa457613aa3613430565b5b613aaf8482856134f2565b509392505050565b600082601f830112613acc57613acb61342b565b5b8135613adc848260208601613a75565b91505092915050565b60008060008060808587031215613aff57613afe613394565b5b6000613b0d87828801613789565b9450506020613b1e87828801613789565b9350506040613b2f878288016133bf565b925050606085013567ffffffffffffffff811115613b5057613b4f613399565b5b613b5c87828801613ab7565b91505092959194509250565b60008060408385031215613b7f57613b7e613394565b5b6000613b8d858286016133bf565b9250506020613b9e858286016133bf565b9150509250929050565b60008060408385031215613bbf57613bbe613394565b5b6000613bcd85828601613789565b9250506020613bde85828601613789565b9150509250929050565b7f5265737472696374656420746f2061646d696e20726f6c650000000000000000600082015250565b6000613c1e601883613680565b9150613c2982613be8565b602082019050919050565b60006020820190508181036000830152613c4d81613c11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c9b57607f821691505b602082108103613cae57613cad613c54565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613cd9565b613d208683613cd9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613d5d613d58613d538461339e565b613d38565b61339e565b9050919050565b6000819050919050565b613d7783613d42565b613d8b613d8382613d64565b848454613ce6565b825550505050565b600090565b613da0613d93565b613dab818484613d6e565b505050565b5b81811015613dcf57613dc4600082613d98565b600181019050613db1565b5050565b601f821115613e1457613de581613cb4565b613dee84613cc9565b81016020851015613dfd578190505b613e11613e0985613cc9565b830182613db0565b50505b505050565b600082821c905092915050565b6000613e3760001984600802613e19565b1980831691505092915050565b6000613e508383613e26565b9150826002028217905092915050565b613e6982613675565b67ffffffffffffffff811115613e8257613e81613446565b5b613e8c8254613c83565b613e97828285613dd3565b600060209050601f831160018114613eca5760008415613eb8578287015190505b613ec28582613e44565b865550613f2a565b601f198416613ed886613cb4565b60005b82811015613f0057848901518255600182019150602085019450602081019050613edb565b86831015613f1d5784890151613f19601f891682613e26565b8355505b6001600288020188555050505b505050505050565b60006040820190508181036000830152613f4c81856136bb565b90508181036020830152613f6081846136bb565b90509392505050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc5602183613680565b9150613fd082613f69565b604082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614057603d83613680565b915061406282613ffb565b604082019050919050565b600060208201905081810360008301526140868161404a565b9050919050565b6000819050919050565b60006140b26140ad6140a88461408d565b613d38565b61339e565b9050919050565b6140c281614097565b82525050565b600060a0820190506140dd6000830188613748565b6140ea6020830187613401565b6140f76040830186613748565b6141046060830185613401565b61411160808301846140b9565b9695505050505050565b60008151905061412a81613772565b92915050565b60006020828403121561414657614145613394565b5b60006141548482850161411b565b91505092915050565b7f43616e6e6f74207472616e736665722064656661756c742061646d696e20746f60008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b60006141b9602d83613680565b91506141c48261415d565b604082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b7f43616e6e6f74207472616e736665722064656661756c742061646d696e20726f60008201527f6c6520746f20796f757273656c66000000000000000000000000000000000000602082015250565b600061424b602e83613680565b9150614256826141ef565b604082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b7f4772616e7420646566616c75742061646d696e20726f6c65206661696c656400600082015250565b60006142b7601f83613680565b91506142c282614281565b602082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614349602d83613680565b9150614354826142ed565b604082019050919050565b600060208201905081810360008301526143788161433c565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006143db602f83613680565b91506143e68261437f565b604082019050919050565b6000602082019050818103600083015261440a816143ce565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614447601883613680565b915061445282614411565b602082019050919050565b600060208201905081810360008301526144768161443a565b9050919050565b7f4e6f204e4654206c656674210000000000000000000000000000000000000000600082015250565b60006144b3600c83613680565b91506144be8261447d565b602082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614545602983613680565b9150614550826144e9565b604082019050919050565b6000602082019050818103600083015261457481614538565b9050919050565b7f4f6e6c79206f776e65722063616e206368616e67652073746174652e00000000600082015250565b60006145b1601c83613680565b91506145bc8261457b565b602082019050919050565b600060208201905081810360008301526145e0816145a4565b9050919050565b7f537461746520496c6c6567616c2e000000000000000000000000000000000000600082015250565b600061461d600e83613680565b9150614628826145e7565b602082019050919050565b6000602082019050818103600083015261464c81614610565b9050919050565b7f486176652075736564206f7468657220636c6f74686573000000000000000000600082015250565b6000614689601783613680565b915061469482614653565b602082019050919050565b600060208201905081810360008301526146b88161467c565b9050919050565b7f4e6f742075736564207468697320636c6f746865730000000000000000000000600082015250565b60006146f5601583613680565b9150614700826146bf565b602082019050919050565b60006020820190508181036000830152614724816146e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147658261339e565b91506147708361339e565b9250826147805761477f61472b565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006147e7602583613680565b91506147f28261478b565b604082019050919050565b60006020820190508181036000830152614816816147da565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614879602483613680565b91506148848261481d565b604082019050919050565b600060208201905081810360008301526148a88161486c565b9050919050565b7f4f6e6c79206f776e6572206f66204e46542063616e206275726e206974000000600082015250565b60006148e5601d83613680565b91506148f0826148af565b602082019050919050565b60006020820190508181036000830152614914816148d8565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614951602083613680565b915061495c8261491b565b602082019050919050565b6000602082019050818103600083015261498081614944565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006149bd601c83613680565b91506149c882614987565b602082019050919050565b600060208201905081810360008301526149ec816149b0565b9050919050565b6000819050919050565b6000614a18614a13614a0e846149f3565b613d38565b61339e565b9050919050565b614a28816149fd565b82525050565b6000606082019050614a436000830186613748565b614a506020830185614a1f565b614a5d6040830184613401565b949350505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a9b601983613680565b9150614aa682614a65565b602082019050919050565b60006020820190508181036000830152614aca81614a8e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b2d603283613680565b9150614b3882614ad1565b604082019050919050565b60006020820190508181036000830152614b5c81614b20565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614ba4601783614b63565b9150614baf82614b6e565b601782019050919050565b6000614bc582613675565b614bcf8185614b63565b9350614bdf818560208601613691565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614c21601183614b63565b9150614c2c82614beb565b601182019050919050565b6000614c4282614b97565b9150614c4e8285614bba565b9150614c5982614c14565b9150614c658284614bba565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cab8261339e565b9150614cb68361339e565b9250828203905081811115614cce57614ccd614c71565b5b92915050565b6000614cdf8261339e565b9150614cea8361339e565b9250828201905080821115614d0257614d01614c71565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000614d2f82614d08565b614d398185614d13565b9350614d49818560208601613691565b614d5281613435565b840191505092915050565b6000608082019050614d726000830187613748565b614d7f6020830186613748565b614d8c6040830185613401565b8181036060830152614d9e8184614d24565b905095945050505050565b600081519050614db8816135e6565b92915050565b600060208284031215614dd457614dd3613394565b5b6000614de284828501614da9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e258261339e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e5757614e56614c71565b5b600182019050919050565b6000614e6d8261339e565b9150614e788361339e565b9250828202614e868161339e565b91508282048414831517614e9d57614e9c614c71565b5b5092915050565b6000614eaf8261339e565b915060008203614ec257614ec1614c71565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614f03602083613680565b9150614f0e82614ecd565b602082019050919050565b60006020820190508181036000830152614f3281614ef6565b9050919050565b60008160601b9050919050565b6000614f5182614f39565b9050919050565b6000614f6382614f46565b9050919050565b614f7b614f7682613736565b614f58565b82525050565b6000819050919050565b614f9c614f978261390b565b614f81565b82525050565b6000819050919050565b614fbd614fb88261339e565b614fa2565b82525050565b6000614fcf8287614f6a565b601482019150614fdf8286614f8b565b602082019150614fef8285614fac565b602082019150614fff8284614fac565b6020820191508190509594505050505056fea26469706673582212203ebe9c764a4ea3a8b83fd9ec6af7b5c71a4d4f22538a591a7df9753aa901711364736f6c63430008130033697066733a2f2f62616679626569667576736472647167756a6f6a33707378766a74636272626f646834337565756e6e6a72347536796d333367643673677270776d2f0000000000000000000000008ef3fd2bf7ae8a190e437aa6248d419c34428804000000000000000000000000b94dcc2cfee41c31bc3e1c7208c9e8e4ad5fcb1c