60a060405234801561000f575f80fd5b506040516140ad3803806140ad83398101604081905261002e91610122565b806001600160a01b0381166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031660805261006a610070565b5061014f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c05760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461011f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610132575f80fd5b81516001600160a01b0381168114610148575f80fd5b9392505050565b608051613f1c6101915f395f8181610294015281816107e501528181610ae601528181610df50152818161100d01528181611195015261169e0152613f1c5ff3fe608060405234801561000f575f80fd5b5060043610610201575f3560e01c806373f8093311610123578063a4c48686116100b8578063c4d66de811610088578063d3d1199e1161006e578063d3d1199e14610508578063da9fc1ae1461051b578063e985e9c51461052e575f80fd5b8063c4d66de8146104e2578063c87b56dd146104f5575f80fd5b8063a4c4868614610467578063abd90f8514610487578063b88d4fde146104bc578063baf1e3eb146104cf575f80fd5b80638ee98730116100f35780638ee987301461043057806395d89b41146104435780639fae16a71461044b578063a22cb46514610454575f80fd5b806373f80933146103ee578063835c8b121461040157806383f94db7146104145780638a2d233314610427575f80fd5b806323b872dd1161019957806359659e901161016957806359659e901461037b5780635c60da1b1461039a5780636352211e146103ba57806370a08231146103cd575f80fd5b806323b872dd1461031157806325ca4c9c1461032457806342842e0e146103465780635356942614610359575f80fd5b80630a5623fb116101d45780630a5623fb1461028f57806310150d6b146102b657806320e3dbd4146102c957806321c96954146102dc575f80fd5b806301ffc9a71461020557806306fdde031461022d578063081812fc14610242578063095ea7b31461027a575b5f80fd5b610218610213366004612ac1565b610595565b60405190151581526020015b60405180910390f35b610235610679565b6040516102249190612b28565b610255610250366004612b3a565b61072d565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610224565b61028d610288366004612b72565b610780565b005b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6102186102c4366004612bb2565b61078f565b61028d6102d7366004612bff565b610a92565b6102556102ea366004612b3a565b60076020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61028d61031f366004612c1a565b610be6565b610218610332366004612bff565b60066020525f908152604090205460ff1681565b61028d610354366004612c1a565b610cda565b610218610367366004612bff565b60086020525f908152604090205460ff1681565b5f546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6001546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6102556103c8366004612b3a565b610cf9565b6103e06103db366004612bff565b610d03565b604051908152602001610224565b61028d6103fc366004612c65565b610da1565b61028d61040f366004612bb2565b610eb5565b61028d610422366004612bff565b610fb9565b6103e060035481565b61021861043e366004612c9c565b61113f565b6102356115d7565b6103e060045481565b61028d610462366004612c65565b611628565b6002546102559073ffffffffffffffffffffffffffffffffffffffff1681565b610255610495366004612b3a565b60056020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61028d6104ca366004612de2565b611633565b61028d6104dd366004612b3a565b61164a565b61028d6104f0366004612bff565b611711565b610235610503366004612b3a565b611a1d565b610218610516366004612bb2565b611ab3565b61028d610529366004612bff565b611bae565b61021861053c366004612e8a565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061062757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061067357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080546060919081906106ab90612eb6565b80601f01602080910402602001604051908101604052809291908181526020018280546106d790612eb6565b80156107225780601f106106f957610100808354040283529160200191610722565b820191905f5260205f20905b81548152906001019060200180831161070557829003601f168201915b505050505091505090565b5f61073782611e45565b505f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff16610673565b61078b828233611ec2565b5050565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f9cf85f95575c3af1e116e3d37fd41e7f36a8a373623f51ffaaa87fdd032fa76760048201523360248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b15801561083a575f80fd5b505afa15801561084c573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83165f9081526006602052604090205460ff166108ae576040517f6d187b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610918573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093c9190612f01565b15610973576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f835c8b12000000000000000000000000000000000000000000000000000000008152309063835c8b12906109b19086908690600401613022565b5f604051808303815f87803b1580156109c8575f80fd5b505af19250505080156109d9575060015b610a50573d808015610a06576040519150601f19603f3d011682016040523d82523d5f602084013e610a0b565b606091505b507f991c111e14b0f28faf2736d7a35941dcc1298809676e746253a2841dbf5b2914848285604051610a3f93929190613050565b60405180910390a15f915050610673565b7f46644010bb804edc5203f42fa3aae6f71344feee12a8dd80d2c073e9735a84288383604051610a81929190613022565b60405180910390a150600192915050565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f530008d2b058137d9c475b1b7d83984f1fcf1dd0e607659d029fc1517ab8926860048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b158015610b3b575f80fd5b505afa158015610b4d573d5f803e3d5ffd5b50505073ffffffffffffffffffffffffffffffffffffffff82169050610b9f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610c3a576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f610c46838333611ecf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cd4576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610c31565b50505050565b610cf483838360405180602001604052805f815250611633565b505050565b5f61067382611e45565b5f7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316610d74576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610c31565b73ffffffffffffffffffffffffffffffffffffffff9092165f908152600390920160205250604090205490565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f530008d2b058137d9c475b1b7d83984f1fcf1dd0e607659d029fc1517ab8926860048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b158015610e4a575f80fd5b505afa158015610e5c573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff919091165f90815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b333014610eee576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610ef9828061309a565b9050111561078b5773ffffffffffffffffffffffffffffffffffffffff8216631f6a1eb96040830135610f2c848061309a565b610f39602087018761309a565b6040518663ffffffff1660e01b8152600401610f5894939291906130fb565b5f604051808303815f8887f1158015610f73573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610cf4919081019061312c565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f530008d2b058137d9c475b1b7d83984f1fcf1dd0e607659d029fc1517ab8926860048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b158015611062575f80fd5b505afa158015611074573d5f803e3d5ffd5b50505f546040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250633659cfe691506024015f604051808303815f87803b1580156110e1575f80fd5b505af11580156110f3573d5f803e3d5ffd5b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94909416939093179092555050565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f9cf85f95575c3af1e116e3d37fd41e7f36a8a373623f51ffaaa87fdd032fa76760048201523360248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b1580156111ea575f80fd5b505afa1580156111fc573d5f803e3d5ffd5b505050505f5a73ffffffffffffffffffffffffffffffffffffffff86165f9081526006602052604090205490915060ff16611263576040517f6d187b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6112736020870187612bff565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f205460ff166112d2576040517f6077d21b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561133c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113609190612f01565b15611397576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113a2848061309a565b8101906113af9190612bff565b6040517f835c8b12000000000000000000000000000000000000000000000000000000008152909150309063835c8b12906113f09089908890600401613022565b5f604051808303815f87803b158015611407575f80fd5b505af1925050508015611418575060015b611491573d808015611445576040519150601f19603f3d011682016040523d82523d5f602084013e61144a565b606091505b507f991c111e14b0f28faf2736d7a35941dcc1298809676e746253a2841dbf5b291487828760405161147e93929190613050565b60405180910390a15f93505050506115d0565b5f61149a61208e565b6004545a6114a890866131ce565b6114b291906131e1565b6114bc91906131f4565b90508673ffffffffffffffffffffffffffffffffffffffff166383bdecac6004548860200160208101906114f09190612bff565b856114fe60208c018c612bff565b60405160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606481018590526084015f604051808303815f88803b158015611578575f80fd5b5087f115801561158a573d5f803e3d5ffd5b50505050507f46644010bb804edc5203f42fa3aae6f71344feee12a8dd80d2c073e9735a842887866040516115c0929190613022565b60405180910390a1600193505050505b9392505050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300916106ab90612eb6565b61078b3383836120a0565b61163e848484610be6565b610cd4848484846121c0565b6040517f46ea9cc50000000000000000000000000000000000000000000000000000000081527f530008d2b058137d9c475b1b7d83984f1fcf1dd0e607659d029fc1517ab8926860048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346ea9cc5906044015f6040518083038186803b1580156116f3575f80fd5b505afa158015611705573d5f803e3d5ffd5b50505060049190915550565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f8115801561175b5750825b90505f8267ffffffffffffffff1660011480156117775750303b155b905081158015611785575080155b156117bc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561181d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b73ffffffffffffffffffffffffffffffffffffffff861661186a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790556040515f90879030906118bc90612a77565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103905ff0801580156118f9573d5f803e3d5ffd5b505f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556001600355604080518082018252601081527f4163636f756e744f776e657273686970000000000000000000000000000000006020808301919091528251808401909352600283527f414f000000000000000000000000000000000000000000000000000000000000908301529192506119b391906123b4565b508315611a155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6060611a2882611e45565b505f611a6460408051808201909152600881527f7572692d68657265000000000000000000000000000000000000000000000000602082015290565b90505f815111611a825760405180602001604052805f8152506115d0565b80611a8c846123c6565b604051602001611a9d929190613222565b6040516020818303038152906040529392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602052604081205460ff16611b11576040517f6d187b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f835c8b12000000000000000000000000000000000000000000000000000000008152309063835c8b1290611b4f9086908690600401613022565b5f604051808303815f87803b158015611b66575f80fd5b505af1158015611b78573d5f803e3d5ffd5b505050506040517f38d205c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3c9190612f01565b15611c73576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f5460405173ffffffffffffffffffffffffffffffffffffffff90911690611c9d90612a84565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff080158015611ce1573d5f803e3d5ffd5b505f82815260056020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff968716908117825585526006835281852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905593869052919052905490517fda35a26f0000000000000000000000000000000000000000000000000000000081526004810184905230602482015291169063da35a26f906044015f604051808303815f87803b158015611dc3575f80fd5b505af1158015611dd5573d5f803e3d5ffd5b50505050611de38282612482565b5f81815260076020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556003805491611e3c83613236565b91905055505050565b5f8181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079302602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610673576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610c31565b610cf4838383600161252f565b5f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009073ffffffffffffffffffffffffffffffffffffffff90811690841615611f4957611f49818587612738565b73ffffffffffffffffffffffffffffffffffffffff811615611fbe57611f715f865f8061252f565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600383016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff8616156120085773ffffffffffffffffffffffffffffffffffffffff86165f9081526003830160205260409020805460010190555b5f85815260028301602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b5f3a1561209a57503a90565b50600190565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316612126576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c31565b73ffffffffffffffffffffffffffffffffffffffff8481165f81815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83163b15610cd4576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a029061223590339088908790879060040161326d565b6020604051808303815f875af192505050801561228d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261228a918101906132ab565b60015b61231a573d8080156122ba576040519150601f19603f3d011682016040523d82523d5f602084013e6122bf565b606091505b5080515f03612312576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c31565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a0200000000000000000000000000000000000000000000000000000000146123ad576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c31565b5050505050565b6123bc6127e8565b61078b8282612851565b60605f6123d283612894565b60010190505f8167ffffffffffffffff8111156123f1576123f1612d21565b6040519080825280601f01601f19166020018201604052801561241b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461242557509392505050565b73ffffffffffffffffffffffffffffffffffffffff82166124d1576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f6004820152602401610c31565b5f6124dd83835f611ecf565b905073ffffffffffffffffffffffffffffffffffffffff811615610cf4576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610c31565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180612571575073ffffffffffffffffffffffffffffffffffffffff831615155b156126e3575f61258085611e45565b905073ffffffffffffffffffffffffffffffffffffffff8416158015906125d357508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612630575073ffffffffffffffffffffffffffffffffffffffff8082165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b1561267f576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c31565b82156126e157848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5f93845260040160205250506040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612743838383612975565b610cf45773ffffffffffffffffffffffffffffffffffffffff8316612797576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610c31565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610c31565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661284f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6128596127e8565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080612885848261330a565b5060018101610cd4838261330a565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106128dc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612908576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061292657662386f26fc10000830492506010015b6305f5e100831061293e576305f5e100830492506008015b612710831061295257612710830492506004015b60648310612964576064830492506002015b600a83106106735760010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff831615801590612a6f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a20575073ffffffffffffffffffffffffffffffffffffffff8085165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b80612a6f57505f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b61052d8061342383390190565b6105978061395083390190565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612abe575f80fd5b50565b5f60208284031215612ad1575f80fd5b81356115d081612a91565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6115d06020830184612adc565b5f60208284031215612b4a575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114612abe575f80fd5b5f8060408385031215612b83575f80fd5b8235612b8e81612b51565b946020939093013593505050565b5f60608284031215612bac575f80fd5b50919050565b5f8060408385031215612bc3575f80fd5b8235612bce81612b51565b9150602083013567ffffffffffffffff811115612be9575f80fd5b612bf585828601612b9c565b9150509250929050565b5f60208284031215612c0f575f80fd5b81356115d081612b51565b5f805f60608486031215612c2c575f80fd5b8335612c3781612b51565b92506020840135612c4781612b51565b929592945050506040919091013590565b8015158114612abe575f80fd5b5f8060408385031215612c76575f80fd5b8235612c8181612b51565b91506020830135612c9181612c58565b809150509250929050565b5f805f8385036080811215612caf575f80fd5b8435612cba81612b51565b935060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612ceb575f80fd5b50602084019150606084013567ffffffffffffffff811115612d0b575f80fd5b612d1786828701612b9c565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612d9557612d95612d21565b604052919050565b5f67ffffffffffffffff821115612db657612db6612d21565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f805f8060808587031215612df5575f80fd5b8435612e0081612b51565b93506020850135612e1081612b51565b925060408501359150606085013567ffffffffffffffff811115612e32575f80fd5b8501601f81018713612e42575f80fd5b8035612e55612e5082612d9d565b612d4e565b818152886020838501011115612e69575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215612e9b575f80fd5b8235612ea681612b51565b91506020830135612c9181612b51565b600181811c90821680612eca57607f821691505b602082108103612bac577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612f11575f80fd5b81516115d081612c58565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f4f575f80fd5b830160208101925035905067ffffffffffffffff811115612f6e575f80fd5b803603821315612f7c575f80fd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f612fd58283612f1c565b60608552612fe7606086018284612f83565b915050612ff76020840184612f1c565b858303602087015261300a838284612f83565b92505050604083013560408501528091505092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f612a6f6040830184612fca565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f61307e6060830185612adc565b82810360408401526130908185612fca565b9695505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126130cd575f80fd5b83018035915067ffffffffffffffff8211156130e7575f80fd5b602001915036819003821315612f7c575f80fd5b604081525f61310e604083018688612f83565b8281036020840152613121818587612f83565b979650505050505050565b5f6020828403121561313c575f80fd5b815167ffffffffffffffff811115613152575f80fd5b8201601f81018413613162575f80fd5b8051613170612e5082612d9d565b818152856020838501011115613184575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610673576106736131a1565b80820180821115610673576106736131a1565b8082028115828204841417610673576106736131a1565b5f81518060208401855e5f93019283525090919050565b5f612a6f613230838661320b565b8461320b565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613266576132666131a1565b5060010190565b5f73ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130906080830184612adc565b5f602082840312156132bb575f80fd5b81516115d081612a91565b601f821115610cf457805f5260205f20601f840160051c810160208510156132eb5750805b601f840160051c820191505b818110156123ad575f81556001016132f7565b815167ffffffffffffffff81111561332457613324612d21565b613338816133328454612eb6565b846132c6565b602080601f83116001811461338a575f84156133545750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611a15565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156133d6578886015182559484019460019091019084016133b7565b508582101561341257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fe608060405234801561000f575f80fd5b5060405161052d38038061052d83398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b6103908061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b610076366004610320565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61010c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f3366004610320565b61011f565b610100610184565b610109816101d6565b50565b610114610184565b61011d5f6102ac565b565b610127610184565b73ffffffffffffffffffffffffffffffffffffffff811661017b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610109816102ac565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461011d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610172565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361023e576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610172565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610330575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610353575f80fd5b939250505056fea2646970667358221220fac9914670b9007915f26ecc1f36dd7b3230b9e934c556f62ac1644525e530d764736f6c6343000819003360a060405260405161059738038061059783398101604081905261002291610354565b61002c828261003e565b506001600160a01b031660805261043f565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610410565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610410565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f80846001600160a01b0316846040516102259190610429565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461033b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610365575f80fd5b61036e83610325565b60208401519092506001600160401b038082111561038a575f80fd5b818501915085601f83011261039d575f80fd5b8151818111156103af576103af610340565b604051601f8201601f19908116603f011681019083821181831017156103d7576103d7610340565b816040528281528860208487010111156103ef575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f60208284031215610420575f80fd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b6080516101416104565f395f602301526101415ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056fea264697066735822122000e84aa9e10e200d35aac34f2f41660348199f92ae0c996a41dab951216acd0b64736f6c63430008190033a2646970667358221220998ac84e1afb9b734be5309c9d6dd60cc87c919340c6530451048f040bc4fa0264736f6c63430008190033000000000000000000000000dc49fa40cb042c1672847c7bf409494b73de9f0c