0x60a06040523060805234801561001457600080fd5b5060805161253b61004c6000396000818161054b0152818161058b015281816106130152818161065301526106cb015261253b6000f3fe60806040526004361061011b5760003560e01c806301ffc9a71461012057806306bfcec6146101555780630f98085e14610181578063248a9ca3146101a35780632f2ff15d146101d157806336568abe146101f15780633659cfe6146102115780634f1ef2861461023157806352d1902d1461024457806354a0c18a146102595780637436f3dc14610279578063785c93d21461029a5780637929acb3146102bc5780638129fc1c146102dc57806391a43e62146102f157806391d1485414610305578063a023e94614610325578063a195f02014610345578063a217fddf14610367578063ac9650d81461037c578063ad4ecb6e146103a9578063b8ebde67146103c9578063d39dff94146103e9578063d547741f1461040b575b600080fd5b34801561012c57600080fd5b5061014061013b366004611c3e565b61042b565b60405190151581526020015b60405180910390f35b34801561016157600080fd5b50600080806040805193845260208401929092529082015260600161014c565b34801561018d57600080fd5b506101a161019c366004611cc5565b61045a565b005b3480156101af57600080fd5b506101c36101be366004611d18565b610487565b60405190815260200161014c565b3480156101dd57600080fd5b506101a16101ec366004611d31565b61049c565b3480156101fd57600080fd5b506101a161020c366004611d31565b6104be565b34801561021d57600080fd5b506101a161022c366004611d5d565b610541565b6101a161023f366004611d8e565b610609565b34801561025057600080fd5b506101c36106be565b34801561026557600080fd5b506101a1610274366004611e93565b61076c565b34801561028557600080fd5b5060408051600080825260208201520161014c565b3480156102a657600080fd5b506102af610934565b60405161014c9190611f7c565b3480156102c857600080fd5b506101a16102d7366004611f8f565b610954565b3480156102e857600080fd5b506101a16109fc565b3480156102fd57600080fd5b506001610140565b34801561031157600080fd5b50610140610320366004611d31565b610ac8565b34801561033157600080fd5b506101a1610340366004612012565b610af3565b34801561035157600080fd5b506101c36000805160206124ae83398151915281565b34801561037357600080fd5b506101c3600081565b34801561038857600080fd5b5061039c61039736600461207d565b610ba7565b60405161014c91906120be565b3480156103b557600080fd5b506101a16103c4366004612120565b610c9b565b3480156103d557600080fd5b506101a16103e436600461207d565b610ca6565b3480156103f557600080fd5b506103fe610cf0565b60405161014c9190612155565b34801561041757600080fd5b506101a1610426366004611d31565b610da6565b600061043682610dc3565b80610445575061044582610dc3565b80610454575061045482610eba565b92915050565b60006104668133610eef565b61048184848460405180602001604052806000815250610f53565b50505050565b600090815260c9602052604090206001015490565b6104a582610487565b6104af8133610eef565b6104b98383610f96565b505050565b6001600160a01b03811633146105335760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61053d828261101c565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105895760405162461bcd60e51b815260040161052a90612199565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105bb611083565b6001600160a01b0316146105e15760405162461bcd60e51b815260040161052a906121d3565b6105ea8161109f565b60408051600080825260208201909252610606918391906110ab565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106515760405162461bcd60e51b815260040161052a90612199565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610683611083565b6001600160a01b0316146106a95760405162461bcd60e51b815260040161052a906121d3565b6106b28261109f565b61053d828260016110ab565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107595760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840161052a565b5060008051602061246783398151915290565b848314158061077b5750828114155b156107995760405163c78e144760e01b815260040160405180910390fd5b60005b8381101561092b576108508787838181106107b9576107b961220d565b90506020028101906107cb9190612223565b8787858181106107dd576107dd61220d565b90506020020160208101906107f29190611d5d565b8686868181106108045761080461220d565b90506020028101906108169190612223565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121692505050565b61086d5760405163729d0f6b60e01b815260040160405180910390fd5b6109198787838181106108825761088261220d565b90506020028101906108949190612223565b8787858181106108a6576108a661220d565b90506020020160208101906108bb9190611d5d565b8686868181106108cd576108cd61220d565b90506020028101906108df9190612223565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f5392505050565b806109238161227f565b91505061079c565b50505050505050565b60606040518060600160405280603881526020016124ce60389139905090565b61099685858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121692505050565b6109b35760405163729d0f6b60e01b815260040160405180910390fd5b6109f585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f5392505050565b5050505050565b600054610100900460ff16610a175760005460ff1615610a1f565b610a1f61125f565b610a825760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161052a565b600054610100900460ff16158015610aa4576000805461ffff19166101011790555b610aac611270565b610ab4611299565b8015610606576000805461ff001916905550565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610aff8133610eef565b838214610b1f5760405163c78e144760e01b815260040160405180910390fd5b60005b82811015610b9f57610b8d868683818110610b3f57610b3f61220d565b9050602002810190610b519190612223565b868685818110610b6357610b6361220d565b9050602002016020810190610b789190611d5d565b60405180602001604052806000815250610f53565b80610b978161227f565b915050610b22565b505050505050565b6060816001600160401b03811115610bc157610bc1611d78565b604051908082528060200260200182016040528015610bf457816020015b6060815260200190600190039081610bdf5790505b50905060005b82811015610c9457610c6430858584818110610c1857610c1861220d565b9050602002810190610c2a9190612223565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112c892505050565b828281518110610c7657610c7661220d565b60200260200101819052508080610c8c9061227f565b915050610bfa565b5092915050565b61053d828233610b78565b60005b818110156104b957610cde838383818110610cc657610cc661220d565b9050602002810190610cd89190612223565b33610b78565b80610ce88161227f565b915050610ca9565b60408051600480825260a0820190925260609160208201608080368337019050509050636efbb19b81600081518110610d2b57610d2b61220d565b60200260200101818152505063e4144b0981600181518110610d4f57610d4f61220d565b60200260200101818152505063ad79217081600281518110610d7357610d7361220d565b60200260200101818152505063ea8300f781600381518110610d9757610d9761220d565b60200260200101818152505090565b610daf82610487565b610db98133610eef565b6104b9838361101c565b60006001600160e01b031982161580610de557506001600160e01b0319808316145b15610df257506000919050565b6001600160e01b031982166301ffc9a760e01b03610e1257506001919050565b6001600160e01b031982166372126f6960e01b03610e3257506001919050565b6001600160e01b031982166343c6085160e01b03610e5257506001919050565b6001600160e01b03198216630b2a676f60e01b03610e7257506001919050565b6001600160e01b03198216631592ca1b60e31b03610e9257506001919050565b6001600160e01b031982166312f2f32560e31b03610eb257506001919050565b506000919050565b60006001600160e01b03198216637965db0b60e01b148061045457506301ffc9a760e01b6001600160e01b0319831614610454565b610ef98282610ac8565b61053d57610f11816001600160a01b031660146113ba565b610f1c8360206113ba565b604051602001610f2d929190612298565b60408051601f198184030181529082905262461bcd60e51b825261052a91600401611f7c565b7f223a2e523f90dbfa9aa9bb783a4deee7d218164a07d596823687a463edb62a1f84848484604051610f889493929190612307565b60405180910390a150505050565b610fa08282610ac8565b61053d57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610fd83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110268282610ac8565b1561053d57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020612467833981519152546001600160a01b031690565b600061053d8133610eef565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156110de576104b98361155c565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611138575060408051601f3d908101601f191682019092526111359181019061235f565b60015b61119b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161052a565b600080516020612467833981519152811461120a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161052a565b506104b98383836115f6565b6000815160000361122957506000611257565b600061123686868661161b565b90506000611244828561168c565b6001600160a01b03868116911614925050505b949350505050565b600061126a306116b0565b15905090565b600054610100900460ff166112975760405162461bcd60e51b815260040161052a90612378565b565b600054610100900460ff166112c05760405162461bcd60e51b815260040161052a90612378565b6112976116bf565b60606112d3836116b0565b61132e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161052a565b600080846001600160a01b03168460405161134991906123c3565b600060405180830381855af49150503d8060008114611384576040519150601f19603f3d011682016040523d82523d6000602084013e611389565b606091505b50915091506113b1828260405180606001604052806027815260200161248760279139611740565b95945050505050565b606060006113c98360026123df565b6113d49060026123f6565b6001600160401b038111156113eb576113eb611d78565b6040519080825280601f01601f191660200182016040528015611415576020820181803683370190505b509050600360fc1b816000815181106114305761143061220d565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061145f5761145f61220d565b60200101906001600160f81b031916908160001a90535060006114838460026123df565b61148e9060016123f6565b90505b6001811115611506576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114c2576114c261220d565b1a60f81b8282815181106114d8576114d861220d565b60200101906001600160f81b031916908160001a90535060049490941c936114ff81612409565b9050611491565b5083156115555760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161052a565b9392505050565b611565816116b0565b6115c75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161052a565b60008051602061246783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6115ff83611779565b60008251118061160c5750805b156104b95761048183836112c8565b60006112576000805160206124ae833981519152838686604051611640929190612420565b6040519081900381206116719392916020019283526001600160a01b03919091166020830152604082015260600190565b604051602081830303815290604052805190602001206117b9565b600080600061169b8585611807565b915091506116a881611875565b509392505050565b6001600160a01b03163b151590565b600054610100900460ff166116e65760405162461bcd60e51b815260040161052a90612378565b6117356040518060400160405280601081526020016f41677265656d656e74734e6f7461727960801b815250604051806040016040528060058152602001640312e302e360dc1b815250611a26565b611297600033611a57565b6060831561174f575081611555565b82511561175f5782518084602001fd5b8160405162461bcd60e51b815260040161052a9190611f7c565b6117828161155c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006104546117c6611a61565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080825160410361183d5760208301516040840151606085015160001a61183187828585611ae1565b9450945050505061186e565b8251604003611866576020830151604084015161185b868383611bc4565b93509350505061186e565b506000905060025b9250929050565b600081600481111561188957611889612430565b036118915750565b60018160048111156118a5576118a5612430565b036118ed5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161052a565b600281600481111561190157611901612430565b0361194e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161052a565b600381600481111561196257611962612430565b036119ba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161052a565b60048160048111156119ce576119ce612430565b036106065760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161052a565b600054610100900460ff16611a4d5760405162461bcd60e51b815260040161052a90612378565b61053d8282611bfd565b61053d8282610f96565b6000611adc7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611a9060fb5490565b60fc546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115611b0e5750600090506003611bbb565b8460ff16601b14158015611b2657508460ff16601c14155b15611b375750600090506004611bbb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611b8b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611bb457600060019250925050611bbb565b9150600090505b94509492505050565b6000806001600160ff1b03831681611be160ff86901c601b6123f6565b9050611bef87828885611ae1565b935093505050935093915050565b600054610100900460ff16611c245760405162461bcd60e51b815260040161052a90612378565b81516020928301208151919092012060fb9190915560fc55565b600060208284031215611c5057600080fd5b81356001600160e01b03198116811461155557600080fd5b60008083601f840112611c7a57600080fd5b5081356001600160401b03811115611c9157600080fd5b60208301915083602082850101111561186e57600080fd5b80356001600160a01b0381168114611cc057600080fd5b919050565b600080600060408486031215611cda57600080fd5b83356001600160401b03811115611cf057600080fd5b611cfc86828701611c68565b9094509250611d0f905060208501611ca9565b90509250925092565b600060208284031215611d2a57600080fd5b5035919050565b60008060408385031215611d4457600080fd5b82359150611d5460208401611ca9565b90509250929050565b600060208284031215611d6f57600080fd5b61155582611ca9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611da157600080fd5b611daa83611ca9565b915060208301356001600160401b0380821115611dc657600080fd5b818501915085601f830112611dda57600080fd5b813581811115611dec57611dec611d78565b604051601f8201601f19908116603f01168101908382118183101715611e1457611e14611d78565b81604052828152886020848701011115611e2d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611e6157600080fd5b5081356001600160401b03811115611e7857600080fd5b6020830191508360208260051b850101111561186e57600080fd5b60008060008060008060608789031215611eac57600080fd5b86356001600160401b0380821115611ec357600080fd5b611ecf8a838b01611e4f565b90985096506020890135915080821115611ee857600080fd5b611ef48a838b01611e4f565b90965094506040890135915080821115611f0d57600080fd5b50611f1a89828a01611e4f565b979a9699509497509295939492505050565b60005b83811015611f47578181015183820152602001611f2f565b50506000910152565b60008151808452611f68816020860160208601611f2c565b601f01601f19169290920160200192915050565b6020815260006115556020830184611f50565b600080600080600060608688031215611fa757600080fd5b85356001600160401b0380821115611fbe57600080fd5b611fca89838a01611c68565b9097509550859150611fde60208901611ca9565b94506040880135915080821115611ff457600080fd5b5061200188828901611c68565b969995985093965092949392505050565b6000806000806040858703121561202857600080fd5b84356001600160401b038082111561203f57600080fd5b61204b88838901611e4f565b9096509450602087013591508082111561206457600080fd5b5061207187828801611e4f565b95989497509550505050565b6000806020838503121561209057600080fd5b82356001600160401b038111156120a657600080fd5b6120b285828601611e4f565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561211357603f19888603018452612101858351611f50565b945092850192908501906001016120e5565b5092979650505050505050565b6000806020838503121561213357600080fd5b82356001600160401b0381111561214957600080fd5b6120b285828601611c68565b6020808252825182820181905260009190848201906040850190845b8181101561218d57835183529284019291840191600101612171565b50909695505050505050565b6020808252602c9082015260008051602061244783398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061244783398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261223a57600080fd5b8301803591506001600160401b0382111561225457600080fd5b60200191503681900382131561186e57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161229157612291612269565b5060010190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516122ca816017850160208801611f2c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516122fb816028840160208801611f2c565b01602801949350505050565b60608152836060820152838560808301376000608085830181018290526001600160a01b0385166020840152601f8601601f19168301838103820160408501529061235490820185611f50565b979650505050505050565b60006020828403121561237157600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082516123d5818460208701611f2c565b9190910192915050565b808202811582820484141761045457610454612269565b8082018082111561045457610454612269565b60008161241857612418612269565b506000190190565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564303c66683039b72291c59229c21d3f88a52b9dc26cbf1b491caf22fa2a6550b9696d706c2f49417370656e41677265656d656e74734e6f746172792e736f6c3a49417370656e41677265656d656e74734e6f746172795630a264697066735822122092a820a0d98a99f36757aa6c5bccbe086c8b077712741f9f5cdaeaa4c77cba7664736f6c63430008110033