60806040526040518060400160405280600581526020017f76616c756500000000000000000000000000000000000000000000000000000081525060099081610048919061032c565b50348015610054575f5ffd5b506040518060400160405280600881526020017f4861696b754e46540000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4841494b55000000000000000000000000000000000000000000000000000000815250815f90816100cf919061032c565b5080600190816100df919061032c565b50505060016008819055506103fb565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061016a57607f821691505b60208210810361017d5761017c610126565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101a4565b6101e986836101a4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61022d61022861022384610201565b61020a565b610201565b9050919050565b5f819050919050565b61024683610213565b61025a61025282610234565b8484546101b0565b825550505050565b5f5f905090565b610271610262565b61027c81848461023d565b505050565b5b8181101561029f576102945f82610269565b600181019050610282565b5050565b601f8211156102e4576102b581610183565b6102be84610195565b810160208510156102cd578190505b6102e16102d985610195565b830182610281565b50505b505050565b5f82821c905092915050565b5f6103045f19846008026102e9565b1980831691505092915050565b5f61031c83836102f5565b9150826002028217905092915050565b610335826100ef565b67ffffffffffffffff81111561034e5761034d6100f9565b5b6103588254610153565b6103638282856102a3565b5f60209050601f831160018114610394575f8415610382578287015190505b61038c8582610311565b8655506103f3565b601f1984166103a286610183565b5f5b828110156103c9578489015182556001820191506020850194506020810190506103a4565b868310156103e657848901516103e2601f8916826102f5565b8355505b6001600288020188555050505b505050505050565b6134a6806104085f395ff3fe608060405234801561000f575f5ffd5b506004361061012a575f3560e01c806361bc221a116100ab57806397afe82d1161006f57806397afe82d14610343578063a22cb46514610373578063b88d4fde1461038f578063c87b56dd146103ab578063e985e9c5146103db5761012a565b806361bc221a146102745780636352211e1461029257806370a08231146102c25780637cb82b2a146102f257806395d89b41146103255761012a565b80632c83ea56116100f25780632c83ea56146101e457806331d81cbb14610200578063350fe1651461021e57806342842e0e1461023a57806349af5bfe146102565761012a565b806301ffc9a71461012e57806306fdde031461015e578063081812fc1461017c578063095ea7b3146101ac57806323b872dd146101c8575b5f5ffd5b6101486004803603810190610143919061257d565b61040b565b60405161015591906125c2565b60405180910390f35b6101666104ec565b604051610173919061264b565b60405180910390f35b6101966004803603810190610191919061269e565b61057b565b6040516101a39190612708565b60405180910390f35b6101c660048036038101906101c1919061274b565b610596565b005b6101e260048036038101906101dd9190612789565b6105ac565b005b6101fe60048036038101906101f991906127d9565b6106ab565b005b610208610a13565b6040516102159190612826565b60405180910390f35b6102386004803603810190610233919061296b565b610a19565b005b610254600480360381019061024f9190612789565b610eba565b005b61025e610ed9565b60405161026b9190612b8f565b60405180910390f35b61027c6112f5565b6040516102899190612826565b60405180910390f35b6102ac60048036038101906102a7919061269e565b6112fe565b6040516102b99190612708565b60405180910390f35b6102dc60048036038101906102d79190612baf565b61130f565b6040516102e99190612826565b60405180910390f35b61030c6004803603810190610307919061269e565b6113c5565b60405161031c9493929190612bda565b60405180910390f35b61032d6115b1565b60405161033a919061264b565b60405180910390f35b61035d6004803603810190610358919061274b565b611641565b60405161036a91906125c2565b60405180910390f35b61038d60048036038101906103889190612c5c565b61166b565b005b6103a960048036038101906103a49190612d38565b611681565b005b6103c560048036038101906103c0919061269e565b6116a6565b6040516103d2919061264b565b60405180910390f35b6103f560048036038101906103f09190612db8565b61170c565b60405161040291906125c2565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e48261179a565b5b9050919050565b60605f80546104fa90612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461052690612e23565b80156105715780601f1061054857610100808354040283529160200191610571565b820191905f5260205f20905b81548152906001019060200180831161055457829003601f168201915b5050505050905090565b5f61058582611803565b5061058f82611889565b9050919050565b6105a882826105a36118c2565b6118c9565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361061c575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106139190612708565b60405180910390fd5b5f61062f838361062a6118c2565b6118db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a5578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161069c93929190612e53565b60405180910390fd5b50505050565b5f821180156106bc57506008548211155b6106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290612ed2565b60405180910390fd5b5f600660018461070b9190612f1d565b8154811061071c5761071b612f50565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461079790612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546107c390612e23565b801561080e5780601f106107e55761010080835404028352916020019161080e565b820191905f5260205f20905b8154815290600101906020018083116107f157829003601f168201915b5050505050815260200160028201805461082790612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461085390612e23565b801561089e5780601f106108755761010080835404028352916020019161089e565b820191905f5260205f20905b81548152906001019060200180831161088157829003601f168201915b505050505081526020016003820180546108b790612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546108e390612e23565b801561092e5780601f106109055761010080835404028352916020019161092e565b820191905f5260205f20905b81548152906001019060200180831161091157829003601f168201915b50505050508152505090503373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612fc7565b60405180910390fd5b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b60085481565b5f60405180606001604052808581526020018481526020018381525090505f5f90505b6003811015610da9575f828260038110610a5957610a58612f50565b5b602002015190505f5f90505b600680549050811015610d9a575f60068281548110610a8757610a86612f50565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610b0290612e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e90612e23565b8015610b795780601f10610b5057610100808354040283529160200191610b79565b820191905f5260205f20905b815481529060010190602001808311610b5c57829003601f168201915b50505050508152602001600282018054610b9290612e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbe90612e23565b8015610c095780601f10610be057610100808354040283529160200191610c09565b820191905f5260205f20905b815481529060010190602001808311610bec57829003601f168201915b50505050508152602001600382018054610c2290612e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4e90612e23565b8015610c995780601f10610c7057610100808354040283529160200191610c99565b820191905f5260205f20905b815481529060010190602001808311610c7c57829003601f168201915b50505050508152505090505f60405180606001604052808360200151815260200183604001518152602001836060015181525090505f5f90505b6003811015610d8a575f828260038110610cf057610cef612f50565b5b6020020151905085604051602001610d08919061301f565b6040516020818303038152906040528051906020012081604051602001610d2f919061301f565b6040516020818303038152906040528051906020012003610d7c576040517f693a889e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508080600101915050610cd3565b5050508080600101915050610a65565b50508080600101915050610a3c565b50610db633600854611ae6565b600660405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610e6e91906131d5565b506040820151816002019081610e8491906131d5565b506060820151816003019081610e9a91906131d5565b50505060085f815480929190610eaf906132a4565b919050555050505050565b610ed483838360405180602001604052805f815250611681565b505050565b60605f5f5f90505b600680549050811015610f745760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610f3991906132eb565b81526020019081526020015f205f9054906101000a900460ff1615610f67578180610f63906132a4565b9250505b8080600101915050610ee1565b505f8167ffffffffffffffff811115610f9057610f8f612847565b5b604051908082528060200260200182016040528015610fc957816020015b610fb66124da565b815260200190600190039081610fae5790505b5090505f5f5f90505b6006805490508110156112b25760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60018361102a91906132eb565b81526020019081526020015f205f9054906101000a900460ff16156112a5576006818154811061105d5761105c612f50565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180546110d890612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461110490612e23565b801561114f5780601f106111265761010080835404028352916020019161114f565b820191905f5260205f20905b81548152906001019060200180831161113257829003601f168201915b5050505050815260200160028201805461116890612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461119490612e23565b80156111df5780601f106111b6576101008083540402835291602001916111df565b820191905f5260205f20905b8154815290600101906020018083116111c257829003601f168201915b505050505081526020016003820180546111f890612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461122490612e23565b801561126f5780601f106112465761010080835404028352916020019161126f565b820191905f5260205f20905b81548152906001019060200180831161125257829003601f168201915b50505050508152505083838151811061128b5761128a612f50565b5b602002602001018190525081806112a1906132a4565b9250505b8080600101915050610fd2565b505f83036112ec576040517ff8826a6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81935050505090565b5f600854905090565b5f61130882611803565b9050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611380575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016113779190612708565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600681815481106113d4575f80fd5b905f5260205f2090600402015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461141890612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461144490612e23565b801561148f5780601f106114665761010080835404028352916020019161148f565b820191905f5260205f20905b81548152906001019060200180831161147257829003601f168201915b5050505050908060020180546114a490612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546114d090612e23565b801561151b5780601f106114f25761010080835404028352916020019161151b565b820191905f5260205f20905b8154815290600101906020018083116114fe57829003601f168201915b50505050509080600301805461153090612e23565b80601f016020809104026020016040519081016040528092919081815260200182805461155c90612e23565b80156115a75780601f1061157e576101008083540402835291602001916115a7565b820191905f5260205f20905b81548152906001019060200180831161158a57829003601f168201915b5050505050905084565b6060600180546115c090612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546115ec90612e23565b80156116375780601f1061160e57610100808354040283529160200191611637565b820191905f5260205f20905b81548152906001019060200180831161161a57829003601f168201915b5050505050905090565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b61167d6116766118c2565b8383611b03565b5050565b61168c8484846105ac565b6116a06116976118c2565b85858585611c6c565b50505050565b60606116b182611803565b505f6116bb611e18565b90505f8151116116d95760405180602001604052805f815250611704565b806116e384611e2e565b6040516020016116f492919061331e565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f5f61180e83611ef8565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361188057826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118779190612826565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6118d68383836001611f31565b505050565b5f5f6118e684611ef8565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611927576119268184866120f0565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119b2576119665f855f5f611f31565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a3157600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611aff828260405180602001604052805f8152506121b3565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7357816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611b6a9190612708565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c5f91906125c2565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611e11578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401611cca9493929190613393565b6020604051808303815f875af1925050508015611d0557506040513d601f19601f82011682018060405250810190611d0291906133f1565b60015b611d86573d805f8114611d33576040519150601f19603f3d011682016040523d82523d5f602084013e611d38565b606091505b505f815103611d7e57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611d759190612708565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e0f57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611e069190612708565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f6001611e3c846121d6565b0190505f8167ffffffffffffffff811115611e5a57611e59612847565b5b6040519080825280601f01601f191660200182016040528015611e8c5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611eed578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611ee257611ee161341c565b5b0494505f8503611e99575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611f6957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561209b575f611f7884611803565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fe257508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff55750611ff3818461170c565b155b1561203757826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161202e9190612708565b60405180910390fd5b811561209957838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6120fb838383612327565b6121ae575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361216f57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016121669190612826565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016121a5929190613449565b60405180910390fd5b505050565b6121bd83836123e7565b6121d16121c86118c2565b5f858585611c6c565b505050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612232577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816122285761222761341c565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061226f576d04ee2d6d415b85acef810000000083816122655761226461341c565b5b0492506020810190505b662386f26fc10000831061229e57662386f26fc1000083816122945761229361341c565b5b0492506010810190505b6305f5e10083106122c7576305f5e10083816122bd576122bc61341c565b5b0492506008810190505b61271083106122ec5761271083816122e2576122e161341c565b5b0492506004810190505b6064831061230f57606483816123055761230461341c565b5b0492506002810190505b600a831061231e576001810190505b80915050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123de57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239f575061239e848461170c565b5b806123dd57508273ffffffffffffffffffffffffffffffffffffffff166123c583611889565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612457575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161244e9190612708565b60405180910390fd5b5f61246383835f6118db565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124d5575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016124cc9190612708565b60405180910390fd5b505050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61255c81612528565b8114612566575f5ffd5b50565b5f8135905061257781612553565b92915050565b5f6020828403121561259257612591612520565b5b5f61259f84828501612569565b91505092915050565b5f8115159050919050565b6125bc816125a8565b82525050565b5f6020820190506125d55f8301846125b3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61261d826125db565b61262781856125e5565b93506126378185602086016125f5565b61264081612603565b840191505092915050565b5f6020820190508181035f8301526126638184612613565b905092915050565b5f819050919050565b61267d8161266b565b8114612687575f5ffd5b50565b5f8135905061269881612674565b92915050565b5f602082840312156126b3576126b2612520565b5b5f6126c08482850161268a565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6126f2826126c9565b9050919050565b612702816126e8565b82525050565b5f60208201905061271b5f8301846126f9565b92915050565b61272a816126e8565b8114612734575f5ffd5b50565b5f8135905061274581612721565b92915050565b5f5f6040838503121561276157612760612520565b5b5f61276e85828601612737565b925050602061277f8582860161268a565b9150509250929050565b5f5f5f606084860312156127a05761279f612520565b5b5f6127ad86828701612737565b93505060206127be86828701612737565b92505060406127cf8682870161268a565b9150509250925092565b5f5f604083850312156127ef576127ee612520565b5b5f6127fc8582860161268a565b925050602061280d85828601612737565b9150509250929050565b6128208161266b565b82525050565b5f6020820190506128395f830184612817565b92915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61287d82612603565b810181811067ffffffffffffffff8211171561289c5761289b612847565b5b80604052505050565b5f6128ae612517565b90506128ba8282612874565b919050565b5f67ffffffffffffffff8211156128d9576128d8612847565b5b6128e282612603565b9050602081019050919050565b828183375f83830152505050565b5f61290f61290a846128bf565b6128a5565b90508281526020810184848401111561292b5761292a612843565b5b6129368482856128ef565b509392505050565b5f82601f8301126129525761295161283f565b5b81356129628482602086016128fd565b91505092915050565b5f5f5f6060848603121561298257612981612520565b5b5f84013567ffffffffffffffff81111561299f5761299e612524565b5b6129ab8682870161293e565b935050602084013567ffffffffffffffff8111156129cc576129cb612524565b5b6129d88682870161293e565b925050604084013567ffffffffffffffff8111156129f9576129f8612524565b5b612a058682870161293e565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a41816126e8565b82525050565b5f82825260208201905092915050565b5f612a61826125db565b612a6b8185612a47565b9350612a7b8185602086016125f5565b612a8481612603565b840191505092915050565b5f608083015f830151612aa45f860182612a38565b5060208301518482036020860152612abc8282612a57565b91505060408301518482036040860152612ad68282612a57565b91505060608301518482036060860152612af08282612a57565b9150508091505092915050565b5f612b088383612a8f565b905092915050565b5f602082019050919050565b5f612b2682612a0f565b612b308185612a19565b935083602082028501612b4285612a29565b805f5b85811015612b7d5784840389528151612b5e8582612afd565b9450612b6983612b10565b925060208a01995050600181019050612b45565b50829750879550505050505092915050565b5f6020820190508181035f830152612ba78184612b1c565b905092915050565b5f60208284031215612bc457612bc3612520565b5b5f612bd184828501612737565b91505092915050565b5f608082019050612bed5f8301876126f9565b8181036020830152612bff8186612613565b90508181036040830152612c138185612613565b90508181036060830152612c278184612613565b905095945050505050565b612c3b816125a8565b8114612c45575f5ffd5b50565b5f81359050612c5681612c32565b92915050565b5f5f60408385031215612c7257612c71612520565b5b5f612c7f85828601612737565b9250506020612c9085828601612c48565b9150509250929050565b5f67ffffffffffffffff821115612cb457612cb3612847565b5b612cbd82612603565b9050602081019050919050565b5f612cdc612cd784612c9a565b6128a5565b905082815260208101848484011115612cf857612cf7612843565b5b612d038482856128ef565b509392505050565b5f82601f830112612d1f57612d1e61283f565b5b8135612d2f848260208601612cca565b91505092915050565b5f5f5f5f60808587031215612d5057612d4f612520565b5b5f612d5d87828801612737565b9450506020612d6e87828801612737565b9350506040612d7f8782880161268a565b925050606085013567ffffffffffffffff811115612da057612d9f612524565b5b612dac87828801612d0b565b91505092959194509250565b5f5f60408385031215612dce57612dcd612520565b5b5f612ddb85828601612737565b9250506020612dec85828601612737565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e3a57607f821691505b602082108103612e4d57612e4c612df6565b5b50919050565b5f606082019050612e665f8301866126f9565b612e736020830185612817565b612e8060408301846126f9565b949350505050565b7f496e76616c6964206861696b75204944000000000000000000000000000000005f82015250565b5f612ebc6010836125e5565b9150612ec782612e88565b602082019050919050565b5f6020820190508181035f830152612ee981612eb0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f278261266b565b9150612f328361266b565b9250828203905081811115612f4a57612f49612ef0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f74596f75724861696b7500000000000000000000000000000000000000005f82015250565b5f612fb1600c836125e5565b9150612fbc82612f7d565b602082019050919050565b5f6020820190508181035f830152612fde81612fa5565b9050919050565b5f81905092915050565b5f612ff9826125db565b6130038185612fe5565b93506130138185602086016125f5565b80840191505092915050565b5f61302a8284612fef565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613056565b61309b8683613056565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130d66130d16130cc8461266b565b6130b3565b61266b565b9050919050565b5f819050919050565b6130ef836130bc565b6131036130fb826130dd565b848454613062565b825550505050565b5f5f905090565b61311a61310b565b6131258184846130e6565b505050565b5b818110156131485761313d5f82613112565b60018101905061312b565b5050565b601f82111561318d5761315e81613035565b61316784613047565b81016020851015613176578190505b61318a61318285613047565b83018261312a565b50505b505050565b5f82821c905092915050565b5f6131ad5f1984600802613192565b1980831691505092915050565b5f6131c5838361319e565b9150826002028217905092915050565b6131de826125db565b67ffffffffffffffff8111156131f7576131f6612847565b5b6132018254612e23565b61320c82828561314c565b5f60209050601f83116001811461323d575f841561322b578287015190505b61323585826131ba565b86555061329c565b601f19841661324b86613035565b5f5b828110156132725784890151825560018201915060208501945060208101905061324d565b8683101561328f578489015161328b601f89168261319e565b8355505b6001600288020188555050505b505050505050565b5f6132ae8261266b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132e0576132df612ef0565b5b600182019050919050565b5f6132f58261266b565b91506133008361266b565b925082820190508082111561331857613317612ef0565b5b92915050565b5f6133298285612fef565b91506133358284612fef565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61336582613341565b61336f818561334b565b935061337f8185602086016125f5565b61338881612603565b840191505092915050565b5f6080820190506133a65f8301876126f9565b6133b360208301866126f9565b6133c06040830185612817565b81810360608301526133d2818461335b565b905095945050505050565b5f815190506133eb81612553565b92915050565b5f6020828403121561340657613405612520565b5b5f613413848285016133dd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60408201905061345c5f8301856126f9565b6134696020830184612817565b939250505056fea2646970667358221220c28c10e4775452a165a1db4dab59c6e6e4cbc14fd3b962e28406c1618d5237f964736f6c634300081c0033