0x60806040523480156200001157600080fd5b506040516200297a3803806200297a8339810160408190526200003491620002b9565b8181620000486301ffc9a760e01b620000d8565b81516200005d9060069060208501906200015c565b508051620000739060079060208401906200015c565b50620000866380ac58cd60e01b620000d8565b62000098635b5e139f60e01b620000d8565b620000aa63780e9d6360e01b620000d8565b5050600a80546001600160a01b03191633179055620000d0631110385960e11b620000d8565b505062000376565b6001600160e01b03198082161415620001375760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b8280546200016a9062000323565b90600052602060002090601f0160209004810192826200018e5760008555620001d9565b82601f10620001a957805160ff1916838001178555620001d9565b82800160010185558215620001d9579182015b82811115620001d9578251825591602001919060010190620001bc565b50620001e7929150620001eb565b5090565b5b80821115620001e75760008155600101620001ec565b600082601f8301126200021457600080fd5b81516001600160401b038082111562000231576200023162000360565b604051601f8301601f19908116603f011681019082821181831017156200025c576200025c62000360565b816040528381526020925086838588010111156200027957600080fd5b600091505b838210156200029d57858201830151818301840152908201906200027e565b83821115620002af5760008385830101525b9695505050505050565b60008060408385031215620002cd57600080fd5b82516001600160401b0380821115620002e557600080fd5b620002f38683870162000202565b935060208501519150808211156200030a57600080fd5b50620003198582860162000202565b9150509250929050565b600181811c908216806200033857607f821691505b602082108114156200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6125f480620003866000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80634f6ccce7116100c357806394b88a851161007c57806394b88a851461031657806395d89b4114610329578063a22cb46514610331578063b88d4fde14610344578063c87b56dd14610357578063e985e9c51461036a57600080fd5b80634f6ccce7146102995780635b7121f8146102ac5780636352211e146102d55780636c0360eb146102e85780636ea07ae2146102f057806370a082311461030357600080fd5b806323b872dd1161011557806323b872dd1461021c5780632516f8e61461022f5780632f745c591461024f57806342842e0e1461026257806342966c681461027557806347dcc4fc1461028857600080fd5b806271a6da1461015c57806301ffc9a71461017157806306fdde03146101b3578063081812fc146101c8578063095ea7b3146101f357806318160ddd14610206575b600080fd5b61016f61016a366004611d89565b6103a6565b005b61019e61017f366004611fe1565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101bb610464565b6040516101aa9190612292565b6101db6101d63660046120d0565b6104f6565b6040516001600160a01b0390911681526020016101aa565b61016f610201366004611fb7565b61057e565b61020e610694565b6040519081526020016101aa565b61016f61022a366004611dd7565b6106a5565b61024261023d3660046120d0565b6106d6565b6040516101aa919061235a565b61020e61025d366004611fb7565b610799565b61016f610270366004611dd7565b6107c2565b61019e6102833660046120d0565b6107dd565b600b546001600160a01b03166101db565b61020e6102a73660046120d0565b610862565b6101db6102ba3660046120d0565b6000908152600d60205260409020546001600160a01b031690565b6101db6102e33660046120d0565b610878565b6101bb6108a0565b61016f6102fe366004611ecb565b6108af565b61020e610311366004611d89565b610b1e565b61020e6103243660046120d0565b610baa565b6101bb610bbe565b61016f61033f366004611e8f565b610bcd565b61016f610352366004611e13565b610c92565b6101bb6103653660046120d0565b610cca565b61019e610378366004611da4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b031633146104105760405162461bcd60e51b815260206004820152602260248201527f497427732063616e20636f6e74726f6c6c6564206279206f776e6572206f6e6c6044820152613c9760f11b60648201526084015b60405180910390fd5b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f44782b3d8795a9261517306d0752cd1fadd4f1087df966c2390762c455db390d9060200160405180910390a150565b60606006805461047390612475565b80601f016020809104026020016040519081016040528092919081815260200182805461049f90612475565b80156104ec5780601f106104c1576101008083540402835291602001916104ec565b820191906000526020600020905b8154815290600101906020018083116104cf57829003601f168201915b5050505050905090565b600061050182610e3b565b6105625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610407565b506000908152600460205260409020546001600160a01b031690565b600061058982610878565b9050806001600160a01b0316836001600160a01b031614156105f75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610407565b336001600160a01b038216148061061357506106138133610378565b6106855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610407565b61068f8383610e48565b505050565b60006106a06002610eb6565b905090565b6106af3382610ec0565b6106cb5760405162461bcd60e51b815260040161040790612309565b61068f838383610faa565b6106fa60405180606001604052806060815260200160608152602001606081525090565b600b546001600160a01b0316632516f8e6610721846000908152600e602052604090205490565b6040518263ffffffff1660e01b815260040161073f91815260200190565b60006040518083038186803b15801561075757600080fd5b505afa15801561076b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610793919081019061201b565b92915050565b6001600160a01b03821660009081526001602052604081206107bb908361112b565b9392505050565b61068f83838360405180602001604052806000815250610c92565b60008160006107eb82610878565b90506001600160a01b038116331461084f5760405162461bcd60e51b815260206004820152602160248201527f497364744e66742e6f6e6c79546f6b656e4f776e65723a204e4f545f4f574e456044820152602960f91b6064820152608401610407565b61085884611137565b5060019392505050565b6000806108706002846111f1565b509392505050565b600061079382604051806060016040528060298152602001612596602991396002919061120d565b60606009805461047390612475565b6001600160a01b0383166108f85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b4b632103932b1b2b4bb32b960811b6044820152606401610407565b81516000106109375760405162461bcd60e51b815260206004820152600b60248201526a496e7661696c642055524960a81b6044820152606401610407565b8051511580159061094d57508060200151516000105b801561095e57508060400151516000105b6109a15760405162461bcd60e51b8152602060048201526014602482015273496e7661696c642043726561746f7220496e666f60601b6044820152606401610407565b600c8054600091826109b2836124b0565b9190505590506109c2848261121a565b6109cc8184611332565b6000818152600d6020908152604080832080546001600160a01b03191633179055600b54855192860151868301519251638520eaa160e01b81526001600160a01b039290921693638520eaa193610a28939192916004016122a5565b602060405180830381600087803b158015610a4257600080fd5b505af1158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a91906120e9565b905080610abd5760405162461bcd60e51b8152602060048201526011602482015270125b9d985a5b190818dc99585d1bdc9259607a1b6044820152606401610407565b6000828152600e6020526040908190208290555182906001600160a01b038716907f4bed5b53bcefc9452ceba91ef9828d0aa8b59cff6c6e9d372d012af18ced8a9590610b0f908890869089906122de565b60405180910390a35050505050565b60006001600160a01b038216610b895760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610407565b6001600160a01b038216600090815260016020526040902061079390610eb6565b6000818152600e6020526040812054610793565b60606007805461047390612475565b6001600160a01b038216331415610c265760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610407565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c9c3383610ec0565b610cb85760405162461bcd60e51b815260040161040790612309565b610cc4848484846113bb565b50505050565b6060610cd582610e3b565b610d395760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610407565b60008281526008602052604081208054610d5290612475565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7e90612475565b8015610dcb5780601f10610da057610100808354040283529160200191610dcb565b820191906000526020600020905b815481529060010190602001808311610dae57829003601f168201915b5050505050905060098054610ddf90612475565b15159050610ded5792915050565b805115610e1f57600981604051602001610e089291906121b7565b604051602081830303815290604052915050919050565b6009610e2a84611439565b604051602001610e089291906121b7565b6000610793600283611550565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610e7d82610878565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610793825490565b6000610ecb82610e3b565b610f2c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610407565b6000610f3783610878565b9050806001600160a01b0316846001600160a01b03161480610f725750836001600160a01b0316610f67846104f6565b6001600160a01b0316145b80610fa257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610fbd82610878565b6001600160a01b0316146110255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610407565b6001600160a01b0382166110875760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610407565b611092600082610e48565b6001600160a01b03831660009081526001602052604090206110b49082611568565b506001600160a01b03821660009081526001602052604090206110d79082611574565b506110e460028284611580565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006107bb8383611596565b600061114282610878565b905061114f600083610e48565b6000828152600860205260409020805461116890612475565b15905061118657600082815260086020526040812061118691611bf4565b6001600160a01b03811660009081526001602052604090206111a89083611568565b506111b460028361161c565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008080806112008686611628565b9097909650945050505050565b6000610fa28484846116c5565b6001600160a01b0382166112705760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610407565b61127981610e3b565b156112c65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610407565b6001600160a01b03821660009081526001602052604090206112e89082611574565b506112f560028284611580565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61133b82610e3b565b61139c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610407565b6000828152600860209081526040909120825161068f92840190611c31565b6113c6848484610faa565b6113d28484848461172e565b610cc45760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610407565b60608161145d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114875780611471816124b0565b91506114809050600a83612407565b9150611461565b60008167ffffffffffffffff8111156114a2576114a2612537565b6040519080825280601f01601f1916602001820160405280156114cc576020820181803683370190505b50905060006114dc60018461241b565b90508593505b8315611547576114f3600a856124cb565b6114fe9060306123ef565b60f81b828261150c8161245e565b93508151811061151e5761151e612521565b60200101906001600160f81b031916908160001a905350611540600a85612407565b93506114e2565b50949350505050565b600081815260018301602052604081205415156107bb565b60006107bb83836117ff565b60006107bb83836118f2565b6000610fa284846001600160a01b038516611941565b815460009082106115f45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610407565b82600001828154811061160957611609612521565b9060005260206000200154905092915050565b60006107bb83836119e2565b8154600090819083106116885760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610407565b600084600001848154811061169f5761169f612521565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816116f55760405162461bcd60e51b81526004016104079190612292565b508461170260018361241b565b8154811061171257611712612521565b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b61174757506001610fa2565b60006117c8630a85bd0160e11b3388878760405160240161176b9493929190612255565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001612564603291396001600160a01b0388169190611ae9565b90506000818060200190518101906117e09190611ffe565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b600081815260018301602052604081205480156118e857600061182360018361241b565b85549091506000906118379060019061241b565b9050600086600001828154811061185057611850612521565b906000526020600020015490508087600001848154811061187357611873612521565b60009182526020909120015561188a8360016123ef565b600082815260018901602052604090205586548790806118ac576118ac61250b565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610793565b6000915050610793565b600081815260018301602052604081205461193957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610793565b506000610793565b6000828152600184016020526040812054806119a65750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556107bb565b82856119b360018461241b565b815481106119c3576119c3612521565b90600052602060002090600202016001018190555060009150506107bb565b600081815260018301602052604081205480156118e8576000611a0660018361241b565b8554909150600090611a1a9060019061241b565b90506000866000018281548110611a3357611a33612521565b9060005260206000209060020201905080876000018481548110611a5957611a59612521565b60009182526020909120825460029092020190815560019182015490820155611a839084906123ef565b815460009081526001890160205260409020558654879080611aa757611aa761250b565b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506107939350505050565b6060610fa2848460008585843b611b425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610407565b600080866001600160a01b03168587604051611b5e919061219b565b60006040518083038185875af1925050503d8060008114611b9b576040519150601f19603f3d011682016040523d82523d6000602084013e611ba0565b606091505b5091509150611bb0828286611bbb565b979650505050505050565b60608315611bca5750816107bb565b825115611bda5782518084602001fd5b8160405162461bcd60e51b81526004016104079190612292565b508054611c0090612475565b6000825580601f10611c10575050565b601f016020900490600052602060002090810190611c2e9190611cb5565b50565b828054611c3d90612475565b90600052602060002090601f016020900481019282611c5f5760008555611ca5565b82601f10611c7857805160ff1916838001178555611ca5565b82800160010185558215611ca5579182015b82811115611ca5578251825591602001919060010190611c8a565b50611cb1929150611cb5565b5090565b5b80821115611cb15760008155600101611cb6565b6000611cdd611cd8846123c7565b612396565b9050828152838383011115611cf157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611d1f57600080fd5b919050565b600082601f830112611d3557600080fd5b6107bb83833560208501611cca565b600082601f830112611d5557600080fd5b8151611d63611cd8826123c7565b818152846020838601011115611d7857600080fd5b610fa2826020830160208701612432565b600060208284031215611d9b57600080fd5b6107bb82611d08565b60008060408385031215611db757600080fd5b611dc083611d08565b9150611dce60208401611d08565b90509250929050565b600080600060608486031215611dec57600080fd5b611df584611d08565b9250611e0360208501611d08565b9150604084013590509250925092565b60008060008060808587031215611e2957600080fd5b611e3285611d08565b9350611e4060208601611d08565b925060408501359150606085013567ffffffffffffffff811115611e6357600080fd5b8501601f81018713611e7457600080fd5b611e8387823560208401611cca565b91505092959194509250565b60008060408385031215611ea257600080fd5b611eab83611d08565b915060208301358015158114611ec057600080fd5b809150509250929050565b600080600060608486031215611ee057600080fd5b611ee984611d08565b9250602084013567ffffffffffffffff80821115611f0657600080fd5b611f1287838801611d24565b93506040860135915080821115611f2857600080fd5b9085019060608288031215611f3c57600080fd5b611f4461236d565b823582811115611f5357600080fd5b611f5f89828601611d24565b825250602083013582811115611f7457600080fd5b611f8089828601611d24565b602083015250604083013582811115611f9857600080fd5b611fa489828601611d24565b6040830152508093505050509250925092565b60008060408385031215611fca57600080fd5b611fd383611d08565b946020939093013593505050565b600060208284031215611ff357600080fd5b81356107bb8161254d565b60006020828403121561201057600080fd5b81516107bb8161254d565b60006020828403121561202d57600080fd5b815167ffffffffffffffff8082111561204557600080fd5b908301906060828603121561205957600080fd5b61206161236d565b82518281111561207057600080fd5b61207c87828601611d44565b82525060208301518281111561209157600080fd5b61209d87828601611d44565b6020830152506040830151828111156120b557600080fd5b6120c187828601611d44565b60408301525095945050505050565b6000602082840312156120e257600080fd5b5035919050565b6000602082840312156120fb57600080fd5b5051919050565b6000815180845261211a816020860160208601612432565b601f01601f19169290920160200192915050565b60008151612140818560208601612432565b9290920192915050565b600081516060845261215f6060850182612102565b9050602083015184820360208601526121788282612102565b915050604083015184820360408601526121928282612102565b95945050505050565b600082516121ad818460208701612432565b9190910192915050565b600080845481600182811c9150808316806121d357607f831692505b60208084108214156121f357634e487b7160e01b86526022600452602486fd5b818015612207576001811461221857612245565b60ff19861689528489019650612245565b60008b81526020902060005b8681101561223d5781548b820152908501908301612224565b505084890196505b505050505050612192818561212e565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061228890830184612102565b9695505050505050565b6020815260006107bb6020830184612102565b6060815260006122b86060830186612102565b82810360208401526122ca8186612102565b905082810360408401526122888185612102565b6060815260006122f16060830186612102565b8460208401528281036040840152612288818561214a565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020815260006107bb602083018461214a565b6040516060810167ffffffffffffffff8111828210171561239057612390612537565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156123bf576123bf612537565b604052919050565b600067ffffffffffffffff8211156123e1576123e1612537565b50601f01601f191660200190565b60008219821115612402576124026124df565b500190565b600082612416576124166124f5565b500490565b60008282101561242d5761242d6124df565b500390565b60005b8381101561244d578181015183820152602001612435565b83811115610cc45750506000910152565b60008161246d5761246d6124df565b506000190190565b600181811c9082168061248957607f821691505b602082108114156124aa57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156124c4576124c46124df565b5060010190565b6000826124da576124da6124f5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c2e57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220e50ad3cf1cdb6f1f7b8f5d4d6dab2aad8e524523a9a9608dff037715d9cd31dd64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000654616767657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f09f949600000000000000000000000000000000000000000000000000000000