60a06040523060805234801561001457600080fd5b5060805161209661004c60003960008181610887015281816108c701528181610971015281816109b10152610a2901526120966000f3fe60806040526004361061016d5760003560e01c806370a08231116100c757806370a082311461036957806375b238fc1461039f5780637d5092c9146103c157806391d14854146103e157806395d89b41146104015780639dc29fac14610416578063a217fddf14610436578063a457c2d71461044b578063a9059cbb1461046b578063aa8c217c1461048b578063c16e1bfb146104a1578063c6788bdd146104db578063d547741f1461050c578063dd62ed3e1461052c578063e58306f91461054c57600080fd5b806301ffc9a71461017257806306fdde03146101a7578063095ea7b3146101c957806318160ddd146101e957806323b872dd14610208578063248a9ca314610228578063253279ad146102585780632f2ff15d1461027a578063313ce5671461029a57806336568abe146102c15780633659cfe6146102e157806339509351146103015780634f1ef2861461032157806352d1902d146103345780636a62784214610349575b600080fd5b34801561017e57600080fd5b5061019261018d366004611963565b61056c565b60405190151581526020015b60405180910390f35b3480156101b357600080fd5b506101bc6105a3565b60405161019e91906119b1565b3480156101d557600080fd5b506101926101e4366004611a00565b610635565b3480156101f557600080fd5b506035545b60405190815260200161019e565b34801561021457600080fd5b50610192610223366004611a2a565b61064d565b34801561023457600080fd5b506101fa610243366004611a66565b60009081526097602052604090206001015490565b34801561026457600080fd5b50610278610273366004611b2a565b610671565b005b34801561028657600080fd5b50610278610295366004611bad565b6107d5565b3480156102a657600080fd5b5061012d5460ff165b60405160ff909116815260200161019e565b3480156102cd57600080fd5b506102786102dc366004611bad565b6107ff565b3480156102ed57600080fd5b506102786102fc366004611bd9565b61087d565b34801561030d57600080fd5b5061019261031c366004611a00565b610945565b61027861032f366004611bf4565b610967565b34801561034057600080fd5b506101fa610a1c565b34801561035557600080fd5b50610278610364366004611bd9565b610aca565b34801561037557600080fd5b506101fa610384366004611bd9565b6001600160a01b031660009081526033602052604090205490565b3480156103ab57600080fd5b506101fa60008051602061204183398151915281565b3480156103cd57600080fd5b506102786103dc366004611a66565b610b7e565b3480156103ed57600080fd5b506101926103fc366004611bad565b610b9d565b34801561040d57600080fd5b506101bc610bc8565b34801561042257600080fd5b50610278610431366004611a00565b610bd7565b34801561044257600080fd5b506101fa600081565b34801561045757600080fd5b50610192610466366004611a00565b610be1565b34801561047757600080fd5b50610192610486366004611a00565b610c5c565b34801561049757600080fd5b5061012e546101fa565b3480156104ad57600080fd5b506102af6104bc366004611bd9565b6001600160a01b0316600090815261012f602052604090205460ff1690565b3480156104e757600080fd5b506102af6104f6366004611bd9565b61012f6020526000908152604090205460ff1681565b34801561051857600080fd5b50610278610527366004611bad565b610c6a565b34801561053857600080fd5b506101fa610547366004611c55565b610c8f565b34801561055857600080fd5b50610278610567366004611a00565b610cba565b60006001600160e01b03198216637965db0b60e01b148061059d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060603680546105b290611c7f565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90611c7f565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b5050505050905090565b600033610643818585610cdc565b5060019392505050565b60003361065b858285610e00565b610666858585610e7a565b506001949350505050565b600054610100900460ff16158080156106915750600054600160ff909116105b806106b257506106a030611013565b1580156106b2575060005460ff166001145b61071a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561073d576000805461ff0019166101001790555b610745611022565b61074f858561104b565b61012d805460ff191660ff851617905561012e82905561077060003361107c565b6107886000805160206120418339815191523361107c565b80156107ce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000828152609760205260409020600101546107f081611102565b6107fa838361107c565b505050565b6001600160a01b038116331461086f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610711565b610879828261110c565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108c55760405162461bcd60e51b815260040161071190611cb9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108f7611173565b6001600160a01b03161461091d5760405162461bcd60e51b815260040161071190611d05565b6109268161118f565b604080516000808252602082019092526109429183919061119a565b50565b6000336106438185856109588383610c8f565b6109629190611d67565b610cdc565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109af5760405162461bcd60e51b815260040161071190611cb9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109e1611173565b6001600160a01b031614610a075760405162461bcd60e51b815260040161071190611d05565b610a108261118f565b6108798282600161119a565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ab75760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610711565b50600080516020611fda83398151915290565b6001600160a01b038116600090815261012f6020526040902054600360ff90911610610b2f5760405162461bcd60e51b81526020600482015260146024820152734e6f20636c61696d732072656d61696e696e672160601b6044820152606401610711565b6001600160a01b038116600090815261012f602052604081208054909190610b599060ff16611d7a565b91906101000a81548160ff021916908360ff1602179055506109428161012e54611305565b600080516020612041833981519152610b9681611102565b5061012e55565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060603780546105b290611c7f565b61087982826113b4565b60003381610bef8286610c8f565b905083811015610c4f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610711565b6106668286868403610cdc565b600033610643818585610e7a565b600082815260976020526040902060010154610c8581611102565b6107fa838361110c565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b600080516020612041833981519152610cd281611102565b6107fa8383611305565b6001600160a01b038316610d3e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610711565b6001600160a01b038216610d9f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610711565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610e0c8484610c8f565b90506000198114610e745781811015610e675760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610711565b610e748484848403610cdc565b50505050565b6001600160a01b038316610ede5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610711565b6001600160a01b038216610f405760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610711565b6001600160a01b03831660009081526033602052604090205481811015610fb85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610711565b6001600160a01b038085166000818152603360205260408082208686039055928616808252908390208054860190559151600080516020612021833981519152906110069086815260200190565b60405180910390a3610e74565b6001600160a01b03163b151590565b600054610100900460ff166110495760405162461bcd60e51b815260040161071190611d99565b565b600054610100900460ff166110725760405162461bcd60e51b815260040161071190611d99565b61087982826114d6565b6110868282610b9d565b6108795760008281526097602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110be3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6109428133611516565b6111168282610b9d565b156108795760008281526097602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020611fda833981519152546001600160a01b031690565b600061087981611102565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111cd576107fa8361156f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611227575060408051601f3d908101601f1916820190925261122491810190611de4565b60015b61128a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610711565b600080516020611fda83398151915281146112f95760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610711565b506107fa838383611609565b6001600160a01b03821661135b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610711565b806035600082825461136d9190611d67565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020612021833981519152910160405180910390a35050565b6001600160a01b0382166114145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610711565b6001600160a01b038216600090815260336020526040902054818110156114885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610711565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020612021833981519152910160405180910390a3505050565b600054610100900460ff166114fd5760405162461bcd60e51b815260040161071190611d99565b60366115098382611e4b565b5060376107fa8282611e4b565b6115208282610b9d565b6108795761152d8161162e565b611538836020611640565b604051602001611549929190611f0a565b60408051601f198184030181529082905262461bcd60e51b8252610711916004016119b1565b61157881611013565b6115da5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610711565b600080516020611fda83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611612836117e2565b60008251118061161f5750805b156107fa57610e748383611822565b606061059d6001600160a01b03831660145b6060600061164f836002611f79565b61165a906002611d67565b6001600160401b0381111561167157611671611a7f565b6040519080825280601f01601f19166020018201604052801561169b576020820181803683370190505b509050600360fc1b816000815181106116b6576116b6611f90565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106116e5576116e5611f90565b60200101906001600160f81b031916908160001a9053506000611709846002611f79565b611714906001611d67565b90505b600181111561178c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061174857611748611f90565b1a60f81b82828151811061175e5761175e611f90565b60200101906001600160f81b031916908160001a90535060049490941c9361178581611fa6565b9050611717565b5083156117db5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610711565b9392505050565b6117eb8161156f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606117db8383604051806060016040528060278152602001611ffa602791396060600080856001600160a01b03168560405161185f9190611fbd565b600060405180830381855af49150503d806000811461189a576040519150601f19603f3d011682016040523d82523d6000602084013e61189f565b606091505b50915091506118b0868383876118ba565b9695505050505050565b60608315611927578251600003611920576118d485611013565b6119205760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610711565b5081611931565b6119318383611939565b949350505050565b8151156119495781518083602001fd5b8060405162461bcd60e51b815260040161071191906119b1565b60006020828403121561197557600080fd5b81356001600160e01b0319811681146117db57600080fd5b60005b838110156119a8578181015183820152602001611990565b50506000910152565b60208152600082518060208401526119d081604085016020870161198d565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146119fb57600080fd5b919050565b60008060408385031215611a1357600080fd5b611a1c836119e4565b946020939093013593505050565b600080600060608486031215611a3f57600080fd5b611a48846119e4565b9250611a56602085016119e4565b9150604084013590509250925092565b600060208284031215611a7857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115611aaf57611aaf611a7f565b604051601f8501601f19908116603f01168101908282118183101715611ad757611ad7611a7f565b81604052809350858152868686011115611af057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611b1b57600080fd5b6117db83833560208501611a95565b60008060008060808587031215611b4057600080fd5b84356001600160401b0380821115611b5757600080fd5b611b6388838901611b0a565b95506020870135915080821115611b7957600080fd5b50611b8687828801611b0a565b935050604085013560ff81168114611b9d57600080fd5b9396929550929360600135925050565b60008060408385031215611bc057600080fd5b82359150611bd0602084016119e4565b90509250929050565b600060208284031215611beb57600080fd5b6117db826119e4565b60008060408385031215611c0757600080fd5b611c10836119e4565b915060208301356001600160401b03811115611c2b57600080fd5b8301601f81018513611c3c57600080fd5b611c4b85823560208401611a95565b9150509250929050565b60008060408385031215611c6857600080fd5b611c71836119e4565b9150611bd0602084016119e4565b600181811c90821680611c9357607f821691505b602082108103611cb357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059d5761059d611d51565b600060ff821660ff8103611d9057611d90611d51565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215611df657600080fd5b5051919050565b601f8211156107fa57600081815260208120601f850160051c81016020861015611e245750805b601f850160051c820191505b81811015611e4357828155600101611e30565b505050505050565b81516001600160401b03811115611e6457611e64611a7f565b611e7881611e728454611c7f565b84611dfd565b602080601f831160018114611ead5760008415611e955750858301515b600019600386901b1c1916600185901b178555611e43565b600085815260208120601f198616915b82811015611edc57888601518255948401946001909101908401611ebd565b5085821015611efa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611f3c81601785016020880161198d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611f6d81602884016020880161198d565b01602801949350505050565b808202811582820484141761059d5761059d611d51565b634e487b7160e01b600052603260045260246000fd5b600081611fb557611fb5611d51565b506000190190565b60008251611fcf81846020870161198d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212203b468cf654b663cd9cd2434d94c7d91bb48b9a419e663931a7ddf9112228305a64736f6c63430008120033