0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e1565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100df576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051611ef061011860003960008181610580015281816105c0015281816107320152818161077201526108010152611ef06000f3fe6080604052600436106101025760003560e01c806352d1902d11610095578063a217fddf11610064578063a217fddf146102f0578063b5787d5014610305578063d547741f14610325578063ec87621c14610345578063fc67b6231461036757600080fd5b806352d1902d1461027b57806391d148541461029057806393366853146102b0578063a1a6daef146102d057600080fd5b806336568abe116100d157806336568abe146102085780633659cfe6146102285780634571f3d2146102485780634f1ef2861461026857600080fd5b806301ffc9a714610153578063248a9ca3146101885780632e1a7d4d146101c65780632f2ff15d146101e857600080fd5b3661014e57600080516020611e7483398151915261011f8161037d565b604051349033907fa56aed091f8d10bafc9d812a245d3748a61cd543e528fed0a92fad8cadf8f72b90600090a3005b600080fd5b34801561015f57600080fd5b5061017361016e366004611950565b61038a565b60405190151581526020015b60405180910390f35b34801561019457600080fd5b506101b86101a336600461197a565b600090815260c9602052604090206001015490565b60405190815260200161017f565b3480156101d257600080fd5b506101e66101e136600461197a565b6103c1565b005b3480156101f457600080fd5b506101e66102033660046119af565b6104ce565b34801561021457600080fd5b506101e66102233660046119af565b6104f8565b34801561023457600080fd5b506101e66102433660046119db565b610576565b34801561025457600080fd5b506101e661026336600461197a565b610652565b6101e6610276366004611a0c565b610728565b34801561028757600080fd5b506101b86107f4565b34801561029c57600080fd5b506101736102ab3660046119af565b6108a7565b3480156102bc57600080fd5b506101e66102cb366004611ad6565b6108d2565b3480156102dc57600080fd5b506101e66102eb366004611b29565b610bb6565b3480156102fc57600080fd5b506101b8600081565b34801561031157600080fd5b506101e6610320366004611b5e565b610e6f565b34801561033157600080fd5b506101e66103403660046119af565b61104a565b34801561035157600080fd5b506101b8600080516020611e7483398151915281565b34801561037357600080fd5b506101b860fb5481565b610387813361106f565b50565b60006001600160e01b03198216637965db0b60e01b14806103bb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020611e748339815191526103d98161037d565b81600081116104035760405162461bcd60e51b81526004016103fa90611b7a565b60405180910390fd5b8247101561046e5760405162461bcd60e51b815260206004820152603260248201527f436f696e732062616c616e6365206d7573742062652067726561746572207468604482015271185b881bdc88195c5d585b08185b5bdd5b9d60721b60648201526084016103fa565b604051339084156108fc029085906000818181858888f1935050505015801561049b573d6000803e3d6000fd5b50604051839033907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d590600090a3505050565b600082815260c960205260409020600101546104e98161037d565b6104f383836110c8565b505050565b6001600160a01b03811633146105685760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103fa565b610572828261114e565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105be5760405162461bcd60e51b81526004016103fa90611ba3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610607600080516020611e54833981519152546001600160a01b031690565b6001600160a01b03161461062d5760405162461bcd60e51b81526004016103fa90611bef565b610636816111b5565b60408051600080825260208201909252610387918391906111cd565b80600081116106735760405162461bcd60e51b81526004016103fa90611b7a565b600080516020611e7483398151915261068b8161037d565b60fb5483036106eb5760405162461bcd60e51b815260206004820152602660248201527f4e65772076616c7565206d757374206265206e6f7420657175616c20746f20636044820152651d5c9c995b9d60d21b60648201526084016103fa565b60fb8054908490556040518490829033907fec6201f495db4e629511f1aae29c22866903963539835f437ee62b8785d8ea9c90600090a450505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107705760405162461bcd60e51b81526004016103fa90611ba3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107b9600080516020611e54833981519152546001600160a01b031690565b6001600160a01b0316146107df5760405162461bcd60e51b81526004016103fa90611bef565b6107e8826111b5565b610572828260016111cd565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108945760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016103fa565b50600080516020611e5483398151915290565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611e748339815191526108ea8161037d565b60006108f96020840184611c3b565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509394506109399250869150819050611c3b565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945061097a925050506020860186611c3b565b90509050808251146109c05760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064016103fa565b60fb54811115610a125760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e74206c6973742065786365656473206c696d69740000000060448201526064016103fa565b6000805b82811015610b7e576000858281518110610a3257610a32611c8c565b602002602001015190506000858381518110610a5057610a50611c8c565b6020026020010151905060006001600160a01b0316826001600160a01b031603610aab5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016103fa565b80600003610ae95760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b60448201526064016103fa565b80471015610b395760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742062616c616e636520696e20636f6e747261637460448201526064016103fa565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610b6f573d6000803e3d6000fd5b50929092019150600101610a16565b506040518190839033907f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d890600090a4505050505050565b610bc360208201826119db565b6001600160a01b038116610be95760405162461bcd60e51b81526004016103fa90611ca2565b600080516020611e74833981519152610c018161037d565b6000610c106040850185611c3b565b808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939450610c51925050506020860186611c3b565b808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939450610c92925050506040870187611c3b565b9050905080825114610cd85760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064016103fa565b60fb54811115610d2a5760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e74206c6973742065786365656473206c696d69740000000060448201526064016103fa565b6000610d3960208801886119db565b90506000805b83811015610e35576000868281518110610d5b57610d5b611c8c565b602002602001015190506000868381518110610d7957610d79611c8c565b6020026020010151905060006001600160a01b0316826001600160a01b031603610dd45760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016103fa565b80600003610e125760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b60448201526064016103fa565b610e276001600160a01b038616338484611338565b929092019150600101610d3f565b506040518190849033907f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d890600090a45050505050505050565b600054610100900460ff1615808015610e8f5750600054600160ff909116105b80610ea95750303b158015610ea9575060005460ff166001145b610f0c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103fa565b6000805460ff191660011790558015610f2f576000805461ff0019166101001790555b610f3c60208301836119db565b6001600160a01b038116610f625760405162461bcd60e51b81526004016103fa90611ca2565b610f7260408401602085016119db565b6001600160a01b038116610f985760405162461bcd60e51b81526004016103fa90611ca2565b836040013560008111610fbd5760405162461bcd60e51b81526004016103fa90611b7a565b610fd46000610fcf60208801886119db565b6110c8565b610ff6600080516020611e74833981519152610fcf60408801602089016119db565b505050604082013560fb558015610572576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600082815260c960205260409020600101546110658161037d565b6104f3838361114e565b61107982826108a7565b6105725761108681611398565b6110918360206113aa565b6040516020016110a2929190611cfd565b60408051601f198184030181529082905262461bcd60e51b82526103fa91600401611d72565b6110d282826108a7565b61057257600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561110a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61115882826108a7565b1561057257600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020611e748339815191526105728161037d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611200576104f38361154d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561125a575060408051601f3d908101601f1916820190925261125791810190611da5565b60015b6112bd5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016103fa565b600080516020611e54833981519152811461132c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016103fa565b506104f38383836115e9565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261139290859061160e565b50505050565b60606103bb6001600160a01b03831660145b606060006113b9836002611dd4565b6113c4906002611deb565b67ffffffffffffffff8111156113dc576113dc6119f6565b6040519080825280601f01601f191660200182016040528015611406576020820181803683370190505b509050600360fc1b8160008151811061142157611421611c8c565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061145057611450611c8c565b60200101906001600160f81b031916908160001a9053506000611474846002611dd4565b61147f906001611deb565b90505b60018111156114f7576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114b3576114b3611c8c565b1a60f81b8282815181106114c9576114c9611c8c565b60200101906001600160f81b031916908160001a90535060049490941c936114f081611dfe565b9050611482565b5083156115465760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103fa565b9392505050565b6001600160a01b0381163b6115ba5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103fa565b600080516020611e5483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6115f2836116e3565b6000825111806115ff5750805b156104f3576113928383611723565b6000611663826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117489092919063ffffffff16565b90508051600014806116845750808060200190518101906116849190611e15565b6104f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103fa565b6116ec8161154d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606115468383604051806060016040528060278152602001611e946027913961175f565b606061175784846000856117d7565b949350505050565b6060600080856001600160a01b03168560405161177c9190611e37565b600060405180830381855af49150503d80600081146117b7576040519150601f19603f3d011682016040523d82523d6000602084013e6117bc565b606091505b50915091506117cd868383876118b2565b9695505050505050565b6060824710156118385760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103fa565b600080866001600160a01b031685876040516118549190611e37565b60006040518083038185875af1925050503d8060008114611891576040519150601f19603f3d011682016040523d82523d6000602084013e611896565b606091505b50915091506118a7878383876118b2565b979650505050505050565b6060831561192157825160000361191a576001600160a01b0385163b61191a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fa565b5081611757565b61175783838151156119365781518083602001fd5b8060405162461bcd60e51b81526004016103fa9190611d72565b60006020828403121561196257600080fd5b81356001600160e01b03198116811461154657600080fd5b60006020828403121561198c57600080fd5b5035919050565b80356001600160a01b03811681146119aa57600080fd5b919050565b600080604083850312156119c257600080fd5b823591506119d260208401611993565b90509250929050565b6000602082840312156119ed57600080fd5b61154682611993565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611a1f57600080fd5b611a2883611993565b9150602083013567ffffffffffffffff811115611a4457600080fd5b8301601f81018513611a5557600080fd5b803567ffffffffffffffff811115611a6f57611a6f6119f6565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611a9e57611a9e6119f6565b604052818152828201602001871015611ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215611ae857600080fd5b813567ffffffffffffffff811115611aff57600080fd5b82016040818503121561154657600080fd5b600060608284031215611b2357600080fd5b50919050565b600060208284031215611b3b57600080fd5b813567ffffffffffffffff811115611b5257600080fd5b61175784828501611b11565b600060608284031215611b7057600080fd5b6115468383611b11565b6020808252600f908201526e43616e206e6f74206265207a65726f60881b604082015260600190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000808335601e19843603018112611c5257600080fd5b83018035915067ffffffffffffffff821115611c6d57600080fd5b6020019150600581901b3603821315611c8557600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f41646472657373206d757374206265206e6f7420657175616c207a65726f0000604082015260600190565b60005b83811015611cf4578181015183820152602001611cdc565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611d35816017850160208801611cd9565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611d66816028840160208801611cd9565b01602801949350505050565b6020815260008251806020840152611d91816040850160208701611cd9565b601f01601f19169190910160400192915050565b600060208284031215611db757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103bb576103bb611dbe565b808201808211156103bb576103bb611dbe565b600081611e0d57611e0d611dbe565b506000190190565b600060208284031215611e2757600080fd5b8151801515811461154657600080fd5b60008251611e49818460208701611cd9565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122073ca465499438f0f43772b7d0743af926f186aea14a6d606265678eecd9779bb64736f6c634300081e0033