60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b5060805161520d61006d60003960008181611fd70152818161202c01526121e7015261520d6000f3fe60806040526004361061027d5760003560e01c80636352211e1161014f578063a217fddf116100c1578063ca15c8731161007a578063ca15c873146109bd578063cf2fd14d146109fa578063d547741f14610a23578063e30c397814610a4c578063e985e9c514610a77578063f2fde38b14610ab45761027d565b8063a217fddf1461089b578063a22cb465146108c6578063ad3cb1cc146108ef578063b064a86a1461091a578063b88d4fde14610957578063c87b56dd146109805761027d565b80637c6b9285116101135780637c6b92851461078b5780638456cb59146107b45780638da5cb5b146107cb5780639010d07c146107f657806391d148541461083357806395d89b41146108705761027d565b80636352211e146106ba57806368c01937146106f757806370a0823114610720578063715018a61461075d57806379ba5097146107745761027d565b80632e60e43e116101f357806342842e0e116101ac57806342842e0e146105a55780634f1ef286146105ce5780634f6ccce7146105ea57806352d1902d146106275780635c975abb146106525780636017bc031461067d5761027d565b80632e60e43e146104ad5780632f2ff15d146104d65780632f745c59146104ff57806336568abe1461053c5780633f4ba83a1461056557806340c10f191461057c5761027d565b80630afcccda116102455780630afcccda1461037957806318160ddd146103b657806323b872dd146103e1578063248a9ca31461040a5780632671f7e6146104475780632bc8200b146104705761027d565b80630164fd951461028257806301ffc9a7146102ab57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190614427565b610add565b005b3480156102b757600080fd5b506102d260048036038101906102cd919061450a565b610c78565b6040516102df9190614552565b60405180910390f35b3480156102f457600080fd5b506102fd610c8a565b60405161030a91906145ec565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190614644565b610d2b565b6040516103479190614680565b60405180910390f35b34801561035c57600080fd5b506103776004803603810190610372919061469b565b610d47565b005b34801561038557600080fd5b506103a0600480360381019061039b919061450a565b610d5d565b6040516103ad91906146f4565b60405180910390f35b3480156103c257600080fd5b506103cb610d8e565b6040516103d8919061471e565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614739565b610da9565b005b34801561041657600080fd5b50610431600480360381019061042c91906147b8565b610eab565b60405161043e91906146f4565b60405180910390f35b34801561045357600080fd5b5061046e600480360381019061046991906147e5565b610ed9565b005b34801561047c57600080fd5b50610497600480360381019061049291906147e5565b610f4c565b6040516104a49190614552565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906147e5565b610f7f565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190614825565b61104e565b005b34801561050b57600080fd5b506105266004803603810190610521919061469b565b611070565b604051610533919061471e565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190614825565b611127565b005b34801561057157600080fd5b5061057a6111a2565b005b34801561058857600080fd5b506105a3600480360381019061059e919061469b565b6111bc565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190614739565b6111da565b005b6105e860048036038101906105e39190614906565b6111fa565b005b3480156105f657600080fd5b50610611600480360381019061060c9190614644565b611219565b60405161061e919061471e565b60405180910390f35b34801561063357600080fd5b5061063c61129d565b60405161064991906146f4565b60405180910390f35b34801561065e57600080fd5b506106676112d0565b6040516106749190614552565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f919061450a565b6112f5565b6040516106b1919061471e565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190614644565b611326565b6040516106ee9190614680565b60405180910390f35b34801561070357600080fd5b5061071e600480360381019061071991906147e5565b611338565b005b34801561072c57600080fd5b5061074760048036038101906107429190614962565b6113ab565b604051610754919061471e565b60405180910390f35b34801561076957600080fd5b50610772611474565b005b34801561078057600080fd5b5061078961147e565b005b34801561079757600080fd5b506107b260048036038101906107ad9190614962565b611488565b005b3480156107c057600080fd5b506107c9611627565b005b3480156107d757600080fd5b506107e0611641565b6040516107ed9190614680565b60405180910390f35b34801561080257600080fd5b5061081d6004803603810190610818919061498f565b611650565b60405161082a9190614680565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614825565b61168d565b6040516108679190614552565b60405180910390f35b34801561087c57600080fd5b50610885611706565b60405161089291906145ec565b60405180910390f35b3480156108a757600080fd5b506108b06117a7565b6040516108bd91906146f4565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906149fb565b6117ae565b005b3480156108fb57600080fd5b506109046117c4565b60405161091191906145ec565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c9190614a3b565b6117fd565b60405161094e9190614680565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614a7b565b611830565b005b34801561098c57600080fd5b506109a760048036038101906109a29190614644565b61184d565b6040516109b491906145ec565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906147b8565b6118b6565b6040516109f1919061471e565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614962565b6118e8565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614825565b6118f4565b005b348015610a5857600080fd5b50610a61611916565b604051610a6e9190614680565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a999190614afe565b611925565b604051610aab9190614552565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad69190614962565b6119c7565b005b6000610ae76119d3565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015610b355750825b9050600060018367ffffffffffffffff16148015610b6a575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610b78575080155b15610baf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610bff5760018560000160086101000a81548160ff0219169083151502179055505b610c08886119fb565b610c128787611a0f565b8315610c6e5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610c659190614b97565b60405180910390a15b5050505050505050565b6000610c8382611a25565b9050919050565b60606000610c96611a9f565b9050806000018054610ca790614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd390614be1565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b505050505091505090565b6000610d3682611ac7565b50610d4082611b4f565b9050919050565b610d598282610d54611b9a565b611ba2565b5050565b6000610d87827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610eab565b9050919050565b600080610d99611bb4565b9050806002018054905091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e1b5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e129190614680565b60405180910390fd5b6000610e2f8383610e2a611b9a565b611bdc565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ea5578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610e9c93929190614c12565b60405180910390fd5b50505050565b600080610eb6611cf9565b905080600001600084815260200190815260200160002060010154915050919050565b610ee9610ee4611b9a565b611d21565b610f12827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191682611dac565b610f48576040517f442ec3e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000610f77837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168361168d565b905092915050565b610f87611b9a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611014827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191682611dac565b61104a576040517f442ec3e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b61105782610eab565b61106081611e01565b61106a8383611e15565b50505050565b60008061107b611bb4565b9050611086846113ab565b83106110cb5783836040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016110c2929190614c49565b60405180910390fd5b8060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205491505092915050565b61112f611b9a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611193576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61119d8282611dac565b505050565b6111b26111ad611b9a565b611d21565b6111ba611e6a565b565b6111cc6111c7611b9a565b611d21565b6111d68282611edc565b5050565b6111f583838360405180602001604052806000815250611830565b505050565b611202611fd5565b61120b826120bb565b61121582826120c6565b5050565b600080611224611bb4565b905061122e610d8e565b8310611274576000836040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161126b929190614c49565b60405180910390fd5b80600201838154811061128a57611289614c72565b5b9060005260206000200154915050919050565b60006112a76121e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000806112db61226c565b90508060000160009054906101000a900460ff1691505090565b600061131f827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166118b6565b9050919050565b600061133182611ac7565b9050919050565b611348611343611b9a565b611d21565b611371827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191682611e15565b6113a7576040517f653574c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6000806113b6611a9f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361142a5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016114219190614680565b60405180910390fd5b8060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b61147c612294565b565b6114866122a8565b565b60006114926119d3565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156114e05750825b9050600060018367ffffffffffffffff16148015611515575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015611523575080155b1561155a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156115aa5760018560000160086101000a81548160ff0219169083151502179055505b6115b386612337565b6115bb612353565b6115c3612365565b831561161f5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516116169190614b97565b60405180910390a15b505050505050565b611637611632611b9a565b611d21565b61163f61236f565b565b600061164b6123e1565b905090565b60008061165b612419565b90506116848382600001600087815260200190815260200160002061244190919063ffffffff16565b91505092915050565b600080611698611cf9565b905080600001600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b60606000611712611a9f565b905080600101805461172390614be1565b80601f016020809104026020016040519081016040528092919081815260200182805461174f90614be1565b801561179c5780601f106117715761010080835404028352916020019161179c565b820191906000526020600020905b81548152906001019060200180831161177f57829003601f168201915b505050505091505090565b6000801b81565b6117c06117b9611b9a565b838361245b565b5050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6000611828837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191683611650565b905092915050565b61183b848484610da9565b611847848484846125d9565b50505050565b606061185882611ac7565b506000611863612790565b9050600081511161188357604051806020016040528060008152506118ae565b8061188d846127a7565b60405160200161189e929190614cdd565b6040516020818303038152906040525b915050919050565b6000806118c1612419565b90506118e0816000016000858152602001908152602001600020612875565b915050919050565b6118f18161288a565b50565b6118fd82610eab565b61190681611e01565b6119108383611dac565b50505050565b6000611920612946565b905090565b600080611930611a9f565b90508060050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b6119d08161297e565b50565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611a03612a04565b611a0c81612a44565b50565b611a17612a04565b611a218282612aca565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a985750611a9782612b07565b5b9050919050565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300905090565b600080611ad383612be9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b4657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611b3d919061471e565b60405180910390fd5b80915050919050565b600080611b5a611a9f565b905080600401600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600033905090565b611baf8383836001612c34565b505050565b60007f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00905090565b600080611bea858585612e08565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c2e57611c2984613035565b611c6d565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c6c57611c6b8185613091565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611caf57611caa8461320b565b611cee565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ced57611cec85856132f7565b5b5b809150509392505050565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b8073ffffffffffffffffffffffffffffffffffffffff16611d40611641565b73ffffffffffffffffffffffffffffffffffffffff1614611da957611da86000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191682613393565b5b50565b600080611db7612419565b90506000611dc585856133e4565b90508015611df657611df4848360000160008881526020019081526020016000206134e690919063ffffffff16565b505b809250505092915050565b611e1281611e0d611b9a565b613393565b50565b600080611e20612419565b90506000611e2e8585613516565b90508015611e5f57611e5d8483600001600088815260200190815260200160002061361790919063ffffffff16565b505b809250505092915050565b611e72613647565b6000611e7c61226c565b905060008160000160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ec4611b9a565b604051611ed19190614680565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4e5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f459190614680565b60405180910390fd5b6000611f5c83836000611bdc565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fd05760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611fc79190614680565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061208257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612069613687565b73ffffffffffffffffffffffffffffffffffffffff1614155b156120b9576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6120c36136de565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561212e57506040513d601f19601f8201168201806040525081019061212b9190614d16565b60015b61216f57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016121669190614680565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146121d657806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016121cd91906146f4565b60405180910390fd5b6121e08383613765565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461226a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b61229c6136de565b6122a660006137d8565b565b60006122b2611b9a565b90508073ffffffffffffffffffffffffffffffffffffffff166122d3611916565b73ffffffffffffffffffffffffffffffffffffffff161461232b57806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123229190614680565b60405180910390fd5b612334816137d8565b50565b61233f612a04565b612348816119fb565b6123506137e4565b50565b61235b612a04565b6123636137ee565b565b61236d612a04565b565b612377613822565b600061238161226c565b905060018160000160006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123c9611b9a565b6040516123d69190614680565b60405180910390a150565b6000806123ec613863565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b60007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000905090565b6000612450836000018361388b565b60001c905092915050565b6000612465611a9f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d857826040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016124cf9190614680565b60405180910390fd5b818160050160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516125cb9190614552565b60405180910390a350505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b111561278a578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261261d611b9a565b8685856040518563ffffffff1660e01b815260040161263f9493929190614d98565b6020604051808303816000875af192505050801561267b57506040513d601f19601f820116820180604052508101906126789190614df9565b60015b6126ff573d80600081146126ab576040519150601f19603f3d011682016040523d82523d6000602084013e6126b0565b606091505b5060008151036126f757836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016126ee9190614680565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461278857836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161277f9190614680565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b6060600060016127b6846138b6565b01905060008167ffffffffffffffff8111156127d5576127d46142fc565b5b6040519080825280601f01601f1916602001820160405280156128075781602001600182028036833780820191505090505b509050600082602001820190505b60011561286a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161285e5761285d614e26565b5b04945060008503612815575b819350505050919050565b600061288382600001613a09565b9050919050565b6128926136de565b600061289c613a1a565b9050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16612900611641565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b600080612951613a1a565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6129866136de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129f85760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016129ef9190614680565b60405180910390fd5b612a01816137d8565b50565b612a0c613a42565b612a42576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612a4c612a04565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612abe5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612ab59190614680565b60405180910390fd5b612ac7816137d8565b50565b612ad2612a04565b6000612adc611a9f565b905082816000019081612aef9190614ff7565b5081816001019081612b019190614ff7565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bd257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612be25750612be182613a62565b5b9050919050565b600080612bf4611a9f565b905080600201600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000612c3e611a9f565b90508180612c795750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612dad576000612c8985611ac7565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612cf457508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612d075750612d058185611925565b155b15612d4957836040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401612d409190614680565b60405180910390fd5b8215612dab57848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8481600401600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b600080612e13611a9f565b90506000612e2085612be9565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612e6257612e61818587613adc565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612ef557612ea4600086600080612c34565b60018260030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612f7a5760018260030160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8582600201600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480925050509392505050565b600061303f611bb4565b9050806002018054905081600301600084815260200190815260200160002081905550806002018290806001815401808255809150506001900390600052602060002001600090919091909150555050565b600061309b611bb4565b905060006130a8846113ab565b905060008260010160008581526020019081526020016000205490508181146131955760008360000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050808460000160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055508184600101600083815260200190815260200160002081905550505b826001016000858152602001908152602001600020600090558260000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600090555050505050565b6000613215611bb4565b905060006001826002018054905061322d91906150f8565b90506000826003016000858152602001908152602001600020549050600083600201838154811061326157613260614c72565b5b906000526020600020015490508084600201838154811061328557613284614c72565b5b9060005260206000200181905550818460030160008381526020019081526020016000208190555083600301600086815260200190815260200160002060009055836002018054806132da576132d961512c565b5b600190038181906000526020600020016000905590555050505050565b6000613301611bb4565b905060006001613310856113ab565b61331a91906150f8565b9050828260000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550808260010160008581526020019081526020016000208190555050505050565b61339d828261168d565b6133e05780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016133d792919061515b565b60405180910390fd5b5050565b6000806133ef611cf9565b90506133fb848461168d565b156134da57600081600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613476611b9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019150506134e0565b60009150505b92915050565b600061350e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613ba0565b905092915050565b600080613521611cf9565b905061352d848461168d565b61360b57600181600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506135a7611b9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050613611565b60009150505b92915050565b600061363f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613cb4565b905092915050565b61364f6112d0565b613685576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006136b57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613d24565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6136e6611b9a565b73ffffffffffffffffffffffffffffffffffffffff16613704611641565b73ffffffffffffffffffffffffffffffffffffffff161461376357613727611b9a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161375a9190614680565b60405180910390fd5b565b61376e82613d2e565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a26000815111156137cb576137c58282613dfb565b506137d4565b6137d3613e7f565b5b5050565b6137e181613ebc565b50565b6137ec612a04565b565b6137f6612a04565b600061380061226c565b905060008160000160006101000a81548160ff02191690831515021790555050565b61382a6112d0565b15613861576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b60008260000182815481106138a3576138a2614c72565b5b9060005260206000200154905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613914577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161390a57613909614e26565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613951576d04ee2d6d415b85acef8100000000838161394757613946614e26565b5b0492506020810190505b662386f26fc10000831061398057662386f26fc10000838161397657613975614e26565b5b0492506010810190505b6305f5e10083106139a9576305f5e100838161399f5761399e614e26565b5b0492506008810190505b61271083106139ce5761271083816139c4576139c3614e26565b5b0492506004810190505b606483106139f157606483816139e7576139e6614e26565b5b0492506002810190505b600a8310613a00576001810190505b80915050919050565b600081600001805490509050919050565b60007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b6000613a4c6119d3565b60000160089054906101000a900460ff16905090565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613ad55750613ad482613efc565b5b9050919050565b613ae7838383613f76565b613b9b57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b5c57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401613b53919061471e565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613b92929190614c49565b60405180910390fd5b505050565b60008083600101600084815260200190815260200160002054905060008114613ca8576000600182613bd291906150f8565b9050600060018660000180549050613bea91906150f8565b9050808214613c59576000866000018281548110613c0b57613c0a614c72565b5b9060005260206000200154905080876000018481548110613c2f57613c2e614c72565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613c6d57613c6c61512c565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613cae565b60009150505b92915050565b6000613cc08383614037565b613d19578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613d1e565b600090505b92915050565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b03613d8a57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613d819190614680565b60405180910390fd5b80613db77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613d24565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051613e2591906151c0565b600060405180830381855af49150503d8060008114613e60576040519150601f19603f3d011682016040523d82523d6000602084013e613e65565b606091505b5091509150613e7585838361405a565b9250505092915050565b6000341115613eba576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000613ec6613a1a565b90508060000160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055613ef8826140e9565b5050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613f6f5750613f6e826141c0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561402e57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613fef5750613fee8484611925565b5b8061402d57508273ffffffffffffffffffffffffffffffffffffffff1661401583611b4f565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b60608261406f5761406a8261422a565b6140e1565b60008251148015614097575060008473ffffffffffffffffffffffffffffffffffffffff163b145b156140d957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016140d09190614680565b60405180910390fd5b8190506140e2565b5b9392505050565b60006140f3613863565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008151111561423d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142ae82614283565b9050919050565b6142be816142a3565b81146142c957600080fd5b50565b6000813590506142db816142b5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614334826142eb565b810181811067ffffffffffffffff82111715614353576143526142fc565b5b80604052505050565b600061436661426f565b9050614372828261432b565b919050565b600067ffffffffffffffff821115614392576143916142fc565b5b61439b826142eb565b9050602081019050919050565b82818337600083830152505050565b60006143ca6143c584614377565b61435c565b9050828152602081018484840111156143e6576143e56142e6565b5b6143f18482856143a8565b509392505050565b600082601f83011261440e5761440d6142e1565b5b813561441e8482602086016143b7565b91505092915050565b6000806000606084860312156144405761443f614279565b5b600061444e868287016142cc565b935050602084013567ffffffffffffffff81111561446f5761446e61427e565b5b61447b868287016143f9565b925050604084013567ffffffffffffffff81111561449c5761449b61427e565b5b6144a8868287016143f9565b9150509250925092565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144e7816144b2565b81146144f257600080fd5b50565b600081359050614504816144de565b92915050565b6000602082840312156145205761451f614279565b5b600061452e848285016144f5565b91505092915050565b60008115159050919050565b61454c81614537565b82525050565b60006020820190506145676000830184614543565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145a757808201518184015260208101905061458c565b60008484015250505050565b60006145be8261456d565b6145c88185614578565b93506145d8818560208601614589565b6145e1816142eb565b840191505092915050565b6000602082019050818103600083015261460681846145b3565b905092915050565b6000819050919050565b6146218161460e565b811461462c57600080fd5b50565b60008135905061463e81614618565b92915050565b60006020828403121561465a57614659614279565b5b60006146688482850161462f565b91505092915050565b61467a816142a3565b82525050565b60006020820190506146956000830184614671565b92915050565b600080604083850312156146b2576146b1614279565b5b60006146c0858286016142cc565b92505060206146d18582860161462f565b9150509250929050565b6000819050919050565b6146ee816146db565b82525050565b600060208201905061470960008301846146e5565b92915050565b6147188161460e565b82525050565b6000602082019050614733600083018461470f565b92915050565b60008060006060848603121561475257614751614279565b5b6000614760868287016142cc565b9350506020614771868287016142cc565b92505060406147828682870161462f565b9150509250925092565b614795816146db565b81146147a057600080fd5b50565b6000813590506147b28161478c565b92915050565b6000602082840312156147ce576147cd614279565b5b60006147dc848285016147a3565b91505092915050565b600080604083850312156147fc576147fb614279565b5b600061480a858286016144f5565b925050602061481b858286016142cc565b9150509250929050565b6000806040838503121561483c5761483b614279565b5b600061484a858286016147a3565b925050602061485b858286016142cc565b9150509250929050565b600067ffffffffffffffff8211156148805761487f6142fc565b5b614889826142eb565b9050602081019050919050565b60006148a96148a484614865565b61435c565b9050828152602081018484840111156148c5576148c46142e6565b5b6148d08482856143a8565b509392505050565b600082601f8301126148ed576148ec6142e1565b5b81356148fd848260208601614896565b91505092915050565b6000806040838503121561491d5761491c614279565b5b600061492b858286016142cc565b925050602083013567ffffffffffffffff81111561494c5761494b61427e565b5b614958858286016148d8565b9150509250929050565b60006020828403121561497857614977614279565b5b6000614986848285016142cc565b91505092915050565b600080604083850312156149a6576149a5614279565b5b60006149b4858286016147a3565b92505060206149c58582860161462f565b9150509250929050565b6149d881614537565b81146149e357600080fd5b50565b6000813590506149f5816149cf565b92915050565b60008060408385031215614a1257614a11614279565b5b6000614a20858286016142cc565b9250506020614a31858286016149e6565b9150509250929050565b60008060408385031215614a5257614a51614279565b5b6000614a60858286016144f5565b9250506020614a718582860161462f565b9150509250929050565b60008060008060808587031215614a9557614a94614279565b5b6000614aa3878288016142cc565b9450506020614ab4878288016142cc565b9350506040614ac58782880161462f565b925050606085013567ffffffffffffffff811115614ae657614ae561427e565b5b614af2878288016148d8565b91505092959194509250565b60008060408385031215614b1557614b14614279565b5b6000614b23858286016142cc565b9250506020614b34858286016142cc565b9150509250929050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b6000614b81614b7c614b7784614b3e565b614b5c565b614b48565b9050919050565b614b9181614b66565b82525050565b6000602082019050614bac6000830184614b88565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b602082108103614c0c57614c0b614bb2565b5b50919050565b6000606082019050614c276000830186614671565b614c34602083018561470f565b614c416040830184614671565b949350505050565b6000604082019050614c5e6000830185614671565b614c6b602083018461470f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000614cb78261456d565b614cc18185614ca1565b9350614cd1818560208601614589565b80840191505092915050565b6000614ce98285614cac565b9150614cf58284614cac565b91508190509392505050565b600081519050614d108161478c565b92915050565b600060208284031215614d2c57614d2b614279565b5b6000614d3a84828501614d01565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000614d6a82614d43565b614d748185614d4e565b9350614d84818560208601614589565b614d8d816142eb565b840191505092915050565b6000608082019050614dad6000830187614671565b614dba6020830186614671565b614dc7604083018561470f565b8181036060830152614dd98184614d5f565b905095945050505050565b600081519050614df3816144de565b92915050565b600060208284031215614e0f57614e0e614279565b5b6000614e1d84828501614de4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614eb77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614e7a565b614ec18683614e7a565b95508019841693508086168417925050509392505050565b6000614ef4614eef614eea8461460e565b614b5c565b61460e565b9050919050565b6000819050919050565b614f0e83614ed9565b614f22614f1a82614efb565b848454614e87565b825550505050565b600090565b614f37614f2a565b614f42818484614f05565b505050565b5b81811015614f6657614f5b600082614f2f565b600181019050614f48565b5050565b601f821115614fab57614f7c81614e55565b614f8584614e6a565b81016020851015614f94578190505b614fa8614fa085614e6a565b830182614f47565b50505b505050565b600082821c905092915050565b6000614fce60001984600802614fb0565b1980831691505092915050565b6000614fe78383614fbd565b9150826002028217905092915050565b6150008261456d565b67ffffffffffffffff811115615019576150186142fc565b5b6150238254614be1565b61502e828285614f6a565b600060209050601f831160018114615061576000841561504f578287015190505b6150598582614fdb565b8655506150c1565b601f19841661506f86614e55565b60005b8281101561509757848901518255600182019150602085019450602081019050615072565b868310156150b457848901516150b0601f891682614fbd565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151038261460e565b915061510e8361460e565b9250828203905081811115615126576151256150c9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006040820190506151706000830185614671565b61517d60208301846146e5565b9392505050565b600081905092915050565b600061519a82614d43565b6151a48185615184565b93506151b4818560208601614589565b80840191505092915050565b60006151cc828461518f565b91508190509291505056fea2646970667358221220473324873d9da2b906ce1783263957065f7a1f5fb1d72ab33fe1e9ff82ad59da64736f6c63430008180033