60806040526000805560026008556115e06009556000600a55610258600b556000600c60006101000a81548160ff021916908315150217905550734557674ea101c7594a68263d735bacd0ae57e569600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009b57600080fd5b506040518060400160405280600f81526020017f4772656d6c696e546f776e2e57544600000000000000000000000000000000008152506040518060400160405280600f81526020017f4772656d6c696e546f776e2e575446000000000000000000000000000000000081525081600190805190602001906200012092919062000230565b5080600290805190602001906200013992919062000230565b5050506200015c620001506200016260201b60201c565b6200016a60201b60201c565b62000345565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023e90620002e0565b90600052602060002090601f016020900481019282620002625760008555620002ae565b82601f106200027d57805160ff1916838001178555620002ae565b82800160010185558215620002ae579182015b82811115620002ad57825182559160200191906001019062000290565b5b509050620002bd9190620002c1565b5090565b5b80821115620002dc576000816000905550600101620002c2565b5090565b60006002820490506001821680620002f957607f821691505b6020821081141562000310576200030f62000316565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61530a80620003556000396000f3fe6080604052600436106101d85760003560e01c80636c19e78311610102578063a22cb46511610095578063df74a99811610064578063df74a998146106d5578063e985e9c5146106fe578063eb5021f81461073b578063f2fde38b14610757576101d8565b8063a22cb4651461061b578063b88d4fde14610644578063c87b56dd1461066d578063d5abeb01146106aa576101d8565b80638da5cb5b116100d15780638da5cb5b1461056c5780639231ab2a1461059757806395d89b41146105d45780639e852f75146105ff576101d8565b80636c19e783146104c457806370a08231146104ed578063715018a61461052a5780637ac3c02f14610541576101d8565b806323b872dd1161017a57806355f804b31161014957806355f804b31461040a57806359c819d314610433578063627804af1461045e5780636352211e14610487576101d8565b806323b872dd1461033e5780632f745c591461036757806342842e0e146103a45780634f6ccce7146103cd576101d8565b8063091babec116101b6578063091babec14610282578063095ea7b3146102ad57806318160ddd146102d65780631c26c06414610301576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906137f2565b610780565b6040516102119190614068565b60405180910390f35b34801561022657600080fd5b5061022f6108ca565b60405161023c91906140c8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613899565b61095c565b6040516102799190614001565b60405180910390f35b34801561028e57600080fd5b506102976109e1565b6040516102a49190614068565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190613785565b6109f4565b005b3480156102e257600080fd5b506102eb610b0d565b6040516102f891906144e5565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613602565b610b16565b60405161033591906144e5565b60405180910390f35b34801561034a57600080fd5b506103656004803603810190610360919061366f565b610b62565b005b34801561037357600080fd5b5061038e60048036038101906103899190613785565b610b72565b60405161039b91906144e5565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c6919061366f565b610d70565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613899565b610d90565b60405161040191906144e5565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061384c565b610de3565b005b34801561043f57600080fd5b50610448610e75565b60405161045591906144e5565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613785565b610ebf565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613899565b610ffb565b6040516104bb9190614001565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613602565b611011565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613602565b6110d1565b60405161052191906144e5565b60405180910390f35b34801561053657600080fd5b5061053f6111ba565b005b34801561054d57600080fd5b50610556611242565b6040516105639190614001565b60405180910390f35b34801561057857600080fd5b5061058161126c565b60405161058e9190614001565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613899565b611296565b6040516105cb91906144ca565b60405180910390f35b3480156105e057600080fd5b506105e96112ae565b6040516105f691906140c8565b60405180910390f35b610619600480360381019061061491906138c6565b611340565b005b34801561062757600080fd5b50610642600480360381019061063d9190613745565b61167f565b005b34801561065057600080fd5b5061066b600480360381019061066691906136c2565b611800565b005b34801561067957600080fd5b50610694600480360381019061068f9190613899565b61185c565b6040516106a191906140c8565b60405180910390f35b3480156106b657600080fd5b506106bf6118d8565b6040516106cc91906144e5565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f791906137c5565b6118de565b005b34801561070a57600080fd5b506107256004803603810190610720919061362f565b611977565b6040516107329190614068565b60405180910390f35b61075560048036038101906107509190613899565b611a0b565b005b34801561076357600080fd5b5061077e60048036038101906107799190613602565b611cdf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c357506108c282611dd7565b5b9050919050565b6060600180546108d9906147d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610905906147d6565b80156109525780601f1061092757610100808354040283529160200191610952565b820191906000526020600020905b81548152906001019060200180831161093557829003601f168201915b5050505050905090565b600061096782611e41565b6109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d9061448a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c60009054906101000a900460ff1681565b60006109ff82610ffb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061434a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8f611e4e565b73ffffffffffffffffffffffffffffffffffffffff161480610abe5750610abd81610ab8611e4e565b611977565b5b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af49061420a565b60405180910390fd5b610b08838383611e56565b505050565b60008054905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b610b6d838383611f08565b505050565b6000610b7d836110d1565b8210610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb59061410a565b60405180910390fd5b6000610bc8610b0d565b905060008060005b83811015610d2e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cc257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d1a5786841415610d0b578195505050505050610d6a565b8380610d1690614839565b9450505b508080610d2690614839565b915050610bd0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d619061440a565b60405180910390fd5b92915050565b610d8b83838360405180602001604052806000815250611800565b505050565b6000610d9a610b0d565b8210610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd29061418a565b60405180910390fd5b819050919050565b610deb611e4e565b73ffffffffffffffffffffffffffffffffffffffff16610e0961126c565b73ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906142aa565b60405180910390fd5b8181600d9190610e709291906133a0565b505050565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905090565b610ec7611e4e565b73ffffffffffffffffffffffffffffffffffffffff16610ee561126c565b73ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906142aa565b60405180910390fd5b600b5481600a6000828254610f5091906145f4565b9250508190551115610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e9061442a565b60405180910390fd5b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fe691906145f4565b92505081905550610ff782826124af565b5050565b6000611006826124cd565b600001519050919050565b611019611e4e565b73ffffffffffffffffffffffffffffffffffffffff1661103761126c565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906142aa565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111399061424a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6111c2611e4e565b73ffffffffffffffffffffffffffffffffffffffff166111e061126c565b73ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d906142aa565b60405180910390fd5b6112406000612628565b565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129e613426565b6112a7826124cd565b9050919050565b6060600280546112bd906147d6565b80601f01602080910402602001604051908101604052809291908181526020018280546112e9906147d6565b80156113365780601f1061130b57610100808354040283529160200191611336565b820191906000526020600020905b81548152906001019060200180831161131957829003601f168201915b5050505050905090565b823373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461137957600080fd5b6008548111156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b59061446a565b60405180910390fd5b6115e06113c9610b0d565b8201111561140c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611403906142ea565b60405180910390fd5b600c60009054906101000a900460ff1661145b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114529061444a565b60405180910390fd5b6114853360405160200161146f9190613f91565b60405160208183030381529060405284846126ee565b6114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb906143ca565b60405180910390fd5b600954601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485611510610b0d565b01031115611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a906144aa565b60405180910390fd5b600284600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540111156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d29061422a565b60405180910390fd5b83600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461162991906145f4565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061167933856124af565b50505050565b611687611e4e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec9061430a565b60405180910390fd5b8060066000611702611e4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117af611e4e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117f49190614068565b60405180910390a35050565b61180b848484611f08565b611817848484846127af565b611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d9061438a565b60405180910390fd5b50505050565b606061186782611e41565b6118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d906142ca565b60405180910390fd5b600d6118b183612946565b6040516020016118c2929190613fac565b6040516020818303038152906040529050919050565b6115e081565b6118e6611e4e565b73ffffffffffffffffffffffffffffffffffffffff1661190461126c565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906142aa565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b803373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a4457600080fd5b600854811115611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061446a565b60405180910390fd5b6115e0611a94610b0d565b82011115611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace906142ea565b60405180910390fd5b600c60009054906101000a900460ff16611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d9061444a565b60405180910390fd5b600954601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611b72610b0d565b01031115611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac906144aa565b60405180910390fd5b600182600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154011115611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906141aa565b60405180910390fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611c8b91906145f4565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550611cdb33836124af565b5050565b611ce7611e4e565b73ffffffffffffffffffffffffffffffffffffffff16611d0561126c565b73ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906142aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc29061414a565b60405180910390fd5b611dd481612628565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611f13826124cd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f3a611e4e565b73ffffffffffffffffffffffffffffffffffffffff161480611f965750611f5f611e4e565b73ffffffffffffffffffffffffffffffffffffffff16611f7e8461095c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fb25750611fb18260000151611fac611e4e565b611977565b5b905080611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb9061432a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d9061428a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906141ca565b60405180910390fd5b6120e38585856001612aa7565b6120f36000848460000151611e56565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846122f991906145f4565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561243f5761236f81611e41565b1561243e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124a78686866001612aad565b505050505050565b6124c9828260405180602001604052806000815250612ab3565b5050565b6124d5613426565b6124de82611e41565b61251d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125149061416a565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461260f578092505050612623565b50808061261b906147ac565b915050612523565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661278f84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506127818780519060200120612f72565b612fa290919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff161490509392505050565b60006127d08473ffffffffffffffffffffffffffffffffffffffff16612fc9565b15612939578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127f9611e4e565b8786866040518563ffffffff1660e01b815260040161281b949392919061401c565b602060405180830381600087803b15801561283557600080fd5b505af192505050801561286657506040513d601f19601f82011682018060405250810190612863919061381f565b60015b6128e9573d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b506000815114156128e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d89061438a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061293e565b600190505b949350505050565b6060600082141561298e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa2565b600082905060005b600082146129c05780806129a990614839565b915050600a826129b9919061464a565b9150612996565b60008167ffffffffffffffff8111156129dc576129db6149cc565b5b6040519080825280601f01601f191660200182016040528015612a0e5781602001600182028036833780820191505090505b5090505b60008514612a9b57600182612a27919061467b565b9150600a85612a3691906148b0565b6030612a4291906145f4565b60f81b818381518110612a5857612a5761499d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a94919061464a565b9450612a12565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b20906143ea565b60405180910390fd5b612b3281611e41565b15612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b69906143aa565b60405180910390fd5b60008311612bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bac9061436a565b60405180910390fd5b612bc26000858386612aa7565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612cbf91906145ae565b6fffffffffffffffffffffffffffffffff168152602001858360200151612ce691906145ae565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612f5557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ef560008884886127af565b612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b9061438a565b60405180910390fd5b8180612f3f90614839565b9250508080612f4d90614839565b915050612e84565b5080600081905550612f6a6000878588612aad565b505050505050565b600081604051602001612f859190613fdb565b604051602081830303815290604052805190602001209050919050565b6000806000612fb18585612fdc565b91509150612fbe8161305f565b819250505092915050565b600080823b905060008111915050919050565b60008060418351141561301e5760008060006020860151925060408601519150606086015160001a905061301287828585613234565b94509450505050613058565b60408351141561304f576000806020850151915060408501519050613044868383613341565b935093505050613058565b60006002915091505b9250929050565b600060048111156130735761307261493f565b5b8160048111156130865761308561493f565b5b141561309157613231565b600160048111156130a5576130a461493f565b5b8160048111156130b8576130b761493f565b5b14156130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f0906140ea565b60405180910390fd5b6002600481111561310d5761310c61493f565b5b8160048111156131205761311f61493f565b5b1415613161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131589061412a565b60405180910390fd5b600360048111156131755761317461493f565b5b8160048111156131885761318761493f565b5b14156131c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c0906141ea565b60405180910390fd5b6004808111156131dc576131db61493f565b5b8160048111156131ef576131ee61493f565b5b1415613230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132279061426a565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326f576000600391509150613338565b601b8560ff16141580156132875750601c8560ff1614155b15613299576000600491509150613338565b6000600187878787604051600081526020016040526040516132be9493929190614083565b6020604051602081039080840390855afa1580156132e0573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332f57600060019250925050613338565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c61338491906145f4565b905061339287828885613234565b935093505050935093915050565b8280546133ac906147d6565b90600052602060002090601f0160209004810192826133ce5760008555613415565b82601f106133e757803560ff1916838001178555613415565b82800160010185558215613415579182015b828111156134145782358255916020019190600101906133f9565b5b5090506134229190613460565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613479576000816000905550600101613461565b5090565b600061349061348b84614525565b614500565b9050828152602081018484840111156134ac576134ab614a0a565b5b6134b784828561476a565b509392505050565b6000813590506134ce81615278565b92915050565b6000813590506134e38161528f565b92915050565b6000813590506134f8816152a6565b92915050565b60008151905061350d816152a6565b92915050565b60008083601f84011261352957613528614a00565b5b8235905067ffffffffffffffff811115613546576135456149fb565b5b60208301915083600182028301111561356257613561614a05565b5b9250929050565b600082601f83011261357e5761357d614a00565b5b813561358e84826020860161347d565b91505092915050565b60008083601f8401126135ad576135ac614a00565b5b8235905067ffffffffffffffff8111156135ca576135c96149fb565b5b6020830191508360018202830111156135e6576135e5614a05565b5b9250929050565b6000813590506135fc816152bd565b92915050565b60006020828403121561361857613617614a14565b5b6000613626848285016134bf565b91505092915050565b6000806040838503121561364657613645614a14565b5b6000613654858286016134bf565b9250506020613665858286016134bf565b9150509250929050565b60008060006060848603121561368857613687614a14565b5b6000613696868287016134bf565b93505060206136a7868287016134bf565b92505060406136b8868287016135ed565b9150509250925092565b600080600080608085870312156136dc576136db614a14565b5b60006136ea878288016134bf565b94505060206136fb878288016134bf565b935050604061370c878288016135ed565b925050606085013567ffffffffffffffff81111561372d5761372c614a0f565b5b61373987828801613569565b91505092959194509250565b6000806040838503121561375c5761375b614a14565b5b600061376a858286016134bf565b925050602061377b858286016134d4565b9150509250929050565b6000806040838503121561379c5761379b614a14565b5b60006137aa858286016134bf565b92505060206137bb858286016135ed565b9150509250929050565b6000602082840312156137db576137da614a14565b5b60006137e9848285016134d4565b91505092915050565b60006020828403121561380857613807614a14565b5b6000613816848285016134e9565b91505092915050565b60006020828403121561383557613834614a14565b5b6000613843848285016134fe565b91505092915050565b6000806020838503121561386357613862614a14565b5b600083013567ffffffffffffffff81111561388157613880614a0f565b5b61388d85828601613597565b92509250509250929050565b6000602082840312156138af576138ae614a14565b5b60006138bd848285016135ed565b91505092915050565b6000806000604084860312156138df576138de614a14565b5b60006138ed868287016135ed565b935050602084013567ffffffffffffffff81111561390e5761390d614a0f565b5b61391a86828701613513565b92509250509250925092565b61392f816146af565b82525050565b61393e816146af565b82525050565b613955613950826146af565b614882565b82525050565b613964816146c1565b82525050565b613973816146cd565b82525050565b61398a613985826146cd565b614894565b82525050565b600061399b8261456b565b6139a58185614581565b93506139b5818560208601614779565b6139be81614a19565b840191505092915050565b60006139d482614576565b6139de8185614592565b93506139ee818560208601614779565b6139f781614a19565b840191505092915050565b6000613a0d82614576565b613a1781856145a3565b9350613a27818560208601614779565b80840191505092915050565b60008154613a40816147d6565b613a4a81866145a3565b94506001821660008114613a655760018114613a7657613aa9565b60ff19831686528186019350613aa9565b613a7f85614556565b60005b83811015613aa157815481890152600182019150602081019050613a82565b838801955050505b50505092915050565b6000613abf601883614592565b9150613aca82614a37565b602082019050919050565b6000613ae2602283614592565b9150613aed82614a60565b604082019050919050565b6000613b05601f83614592565b9150613b1082614aaf565b602082019050919050565b6000613b28601c836145a3565b9150613b3382614ad8565b601c82019050919050565b6000613b4b602683614592565b9150613b5682614b01565b604082019050919050565b6000613b6e602a83614592565b9150613b7982614b50565b604082019050919050565b6000613b91602383614592565b9150613b9c82614b9f565b604082019050919050565b6000613bb4601b83614592565b9150613bbf82614bee565b602082019050919050565b6000613bd7602583614592565b9150613be282614c17565b604082019050919050565b6000613bfa602283614592565b9150613c0582614c66565b604082019050919050565b6000613c1d603983614592565b9150613c2882614cb5565b604082019050919050565b6000613c40601c83614592565b9150613c4b82614d04565b602082019050919050565b6000613c63602b83614592565b9150613c6e82614d2d565b604082019050919050565b6000613c86602283614592565b9150613c9182614d7c565b604082019050919050565b6000613ca9602683614592565b9150613cb482614dcb565b604082019050919050565b6000613ccc6005836145a3565b9150613cd782614e1a565b600582019050919050565b6000613cef602083614592565b9150613cfa82614e43565b602082019050919050565b6000613d12602f83614592565b9150613d1d82614e6c565b604082019050919050565b6000613d35601883614592565b9150613d4082614ebb565b602082019050919050565b6000613d58601a83614592565b9150613d6382614ee4565b602082019050919050565b6000613d7b603283614592565b9150613d8682614f0d565b604082019050919050565b6000613d9e602283614592565b9150613da982614f5c565b604082019050919050565b6000613dc1602383614592565b9150613dcc82614fab565b604082019050919050565b6000613de4603383614592565b9150613def82614ffa565b604082019050919050565b6000613e07601d83614592565b9150613e1282615049565b602082019050919050565b6000613e2a601a83614592565b9150613e3582615072565b602082019050919050565b6000613e4d602183614592565b9150613e588261509b565b604082019050919050565b6000613e70602e83614592565b9150613e7b826150ea565b604082019050919050565b6000613e93603483614592565b9150613e9e82615139565b604082019050919050565b6000613eb6601483614592565b9150613ec182615188565b602082019050919050565b6000613ed9602583614592565b9150613ee4826151b1565b604082019050919050565b6000613efc602d83614592565b9150613f0782615200565b604082019050919050565b6000613f1f602083614592565b9150613f2a8261524f565b602082019050919050565b604082016000820151613f4b6000850182613926565b506020820151613f5e6020850182613f73565b50505050565b613f6d8161473f565b82525050565b613f7c81614749565b82525050565b613f8b8161475d565b82525050565b6000613f9d8284613944565b60148201915081905092915050565b6000613fb88285613a33565b9150613fc48284613a02565b9150613fcf82613cbf565b91508190509392505050565b6000613fe682613b1b565b9150613ff28284613979565b60208201915081905092915050565b60006020820190506140166000830184613935565b92915050565b60006080820190506140316000830187613935565b61403e6020830186613935565b61404b6040830185613f64565b818103606083015261405d8184613990565b905095945050505050565b600060208201905061407d600083018461395b565b92915050565b6000608082019050614098600083018761396a565b6140a56020830186613f82565b6140b2604083018561396a565b6140bf606083018461396a565b95945050505050565b600060208201905081810360008301526140e281846139c9565b905092915050565b6000602082019050818103600083015261410381613ab2565b9050919050565b6000602082019050818103600083015261412381613ad5565b9050919050565b6000602082019050818103600083015261414381613af8565b9050919050565b6000602082019050818103600083015261416381613b3e565b9050919050565b6000602082019050818103600083015261418381613b61565b9050919050565b600060208201905081810360008301526141a381613b84565b9050919050565b600060208201905081810360008301526141c381613ba7565b9050919050565b600060208201905081810360008301526141e381613bca565b9050919050565b6000602082019050818103600083015261420381613bed565b9050919050565b6000602082019050818103600083015261422381613c10565b9050919050565b6000602082019050818103600083015261424381613c33565b9050919050565b6000602082019050818103600083015261426381613c56565b9050919050565b6000602082019050818103600083015261428381613c79565b9050919050565b600060208201905081810360008301526142a381613c9c565b9050919050565b600060208201905081810360008301526142c381613ce2565b9050919050565b600060208201905081810360008301526142e381613d05565b9050919050565b6000602082019050818103600083015261430381613d28565b9050919050565b6000602082019050818103600083015261432381613d4b565b9050919050565b6000602082019050818103600083015261434381613d6e565b9050919050565b6000602082019050818103600083015261436381613d91565b9050919050565b6000602082019050818103600083015261438381613db4565b9050919050565b600060208201905081810360008301526143a381613dd7565b9050919050565b600060208201905081810360008301526143c381613dfa565b9050919050565b600060208201905081810360008301526143e381613e1d565b9050919050565b6000602082019050818103600083015261440381613e40565b9050919050565b6000602082019050818103600083015261442381613e63565b9050919050565b6000602082019050818103600083015261444381613e86565b9050919050565b6000602082019050818103600083015261446381613ea9565b9050919050565b6000602082019050818103600083015261448381613ecc565b9050919050565b600060208201905081810360008301526144a381613eef565b9050919050565b600060208201905081810360008301526144c381613f12565b9050919050565b60006040820190506144df6000830184613f35565b92915050565b60006020820190506144fa6000830184613f64565b92915050565b600061450a61451b565b90506145168282614808565b919050565b6000604051905090565b600067ffffffffffffffff8211156145405761453f6149cc565b5b61454982614a19565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145b982614703565b91506145c483614703565b9250826fffffffffffffffffffffffffffffffff038211156145e9576145e86148e1565b5b828201905092915050565b60006145ff8261473f565b915061460a8361473f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463f5761463e6148e1565b5b828201905092915050565b60006146558261473f565b91506146608361473f565b9250826146705761466f614910565b5b828204905092915050565b60006146868261473f565b91506146918361473f565b9250828210156146a4576146a36148e1565b5b828203905092915050565b60006146ba8261471f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561479757808201518184015260208101905061477c565b838111156147a6576000848401525b50505050565b60006147b78261473f565b915060008214156147cb576147ca6148e1565b5b600182039050919050565b600060028204905060018216806147ee57607f821691505b602082108114156148025761480161496e565b5b50919050565b61481182614a19565b810181811067ffffffffffffffff821117156148305761482f6149cc565b5b80604052505050565b60006148448261473f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614877576148766148e1565b5b600182019050919050565b600061488d8261489e565b9050919050565b6000819050919050565b60006148a982614a2a565b9050919050565b60006148bb8261473f565b91506148c68361473f565b9250826148d6576148d5614910565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e2774206d696e74206d6f7265207468616e2031204e46542e0000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e2774206d696e74206d6f7265207468616e2033204e4654732e00000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e7420776f756c642065786365656420737570706c790000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f496e76616c6964207369676e61747572652070726f7669646564000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820696e207468652064657620726573657276652c206d60008201527f696e74206120736d616c6c657220616d6f756e74000000000000000000000000602082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b7f4e756d62657220746f206d696e742065786365656473206d6178696d756d207060008201527f6572207478000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f43616e2774206d696e742074686174206d616e7920696e207072652d73616c65600082015250565b615281816146af565b811461528c57600080fd5b50565b615298816146c1565b81146152a357600080fd5b50565b6152af816146d7565b81146152ba57600080fd5b50565b6152c68161473f565b81146152d157600080fd5b5056fea2646970667358221220e0eaf1b33a3e140d1973cadfc1fc8d4aaaa8d720d823a994f26cc74331a2e37964736f6c63430008070033