608060405234801561001057600080fd5b50600054610100900460ff16158080156100315750600054600160ff909116105b8061004b5750303b15801561004b575060005460ff166001145b6100b25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156100d5576000805461ff0019166101001790555b801561011b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50611af78061012b6000396000f3fe608060405234801561001057600080fd5b50600436106101635760003560e01c806370a08231116100ce578063983b2d5611610087578063983b2d56146102f6578063a457c2d714610309578063a9059cbb1461031c578063aa271e1a1461032f578063cfbd488514610352578063d505accf14610365578063dd62ed3e1461037857600080fd5b806370a08231146102595780637ecebe001461028257806384b0196e146102955780638da5cb5b146102b057806390218cff146102db57806395d89b41146102ee57600080fd5b80632b471d8e116101205780632b471d8e146101f6578063313ce56714610209578063350ebe04146102185780633644e5151461022b578063395093511461023357806340c10f191461024657600080fd5b806306fdde0314610168578063077f224a14610186578063095ea7b31461019b57806313af4035146101be57806318160ddd146101d157806323b872dd146101e3575b600080fd5b61017061038b565b60405161017d919061156d565b60405180910390f35b610199610194366004611646565b61041d565b005b6101ae6101a93660046116ba565b61042d565b604051901515815260200161017d565b6101996101cc3660046116e4565b610447565b6035545b60405190815260200161017d565b6101ae6101f13660046116ff565b6104bc565b61019961020436600461173b565b6104e0565b6040516012815260200161017d565b610199610226366004611767565b61051e565b6101d56105b6565b6101ae6102413660046116ba565b6105c5565b6101996102543660046116ba565b6105e2565b6101d56102673660046116e4565b6001600160a01b031660009081526033602052604090205490565b6101d56102903660046116e4565b61061c565b61029d61063a565b60405161017d979695949392919061179a565b60cd546102c3906001600160a01b031681565b6040516001600160a01b03909116815260200161017d565b6101996102e9366004611833565b6106dd565b6101706106ea565b6101996103043660046116e4565b6106f9565b6101ae6103173660046116ba565b610770565b6101ae61032a3660046116ba565b6107eb565b6101ae61033d3660046116e4565b60cc6020526000908152604090205460ff1681565b6101996103603660046116e4565b6107f9565b61019961037336600461184c565b610884565b6101d56103863660046118bf565b6109e8565b60606036805461039a906118e9565b80601f01602080910402602001604051908101604052809291908181526020018280546103c6906118e9565b80156104135780601f106103e857610100808354040283529160200191610413565b820191906000526020600020905b8154815290600101906020018083116103f657829003601f168201915b5050505050905090565b610428838383610a13565b505050565b60003361043b818585610b79565b60019150505b92915050565b60cd546001600160a01b03163314610472576040516353da4ae960e11b815260040160405180910390fd5b60cd80546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6000336104ca858285610c9d565b6104d5858585610d11565b506001949350505050565b33600090815260cc602052604090205460ff16610510576040516316e3d80160e21b815260040160405180910390fd5b61051a8183610eaa565b5050565b33600090815260cc602052604090205460ff1661054e576040516316e3d80160e21b815260040160405180910390fd5b806001600160a01b0316826001600160a01b0316146105ac57600061057383836109e8565b9050838110156105965760405163deaad2e560e01b815260040160405180910390fd5b6105aa83836105a58785611933565b610b79565b505b6104288284610eaa565b60006105c0610fcc565b905090565b60003361043b8185856105d883836109e8565b6105a59190611946565b33600090815260cc602052604090205460ff16610612576040516316e3d80160e21b815260040160405180910390fd5b61051a8282610fd6565b6001600160a01b038116600090815260996020526040812054610441565b6000606080600080600060606065546000801b14801561065a5750606654155b6106a35760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b6106ab611085565b6106b3611094565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6106e73382610eaa565b50565b60606037805461039a906118e9565b60cd546001600160a01b03163314610724576040516353da4ae960e11b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b6000338161077e82866109e8565b9050838110156107de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161069a565b6104d58286868403610b79565b60003361043b818585610d11565b336001600160a01b0382161480159061081d575060cd546001600160a01b03163314155b1561083b57604051634e87cc6360e11b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055517f44f4322f8daa225d5f4877ad0f7d3dfba248a774396f3ca99405ed40a044fe819190a250565b834211156108d45760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161069a565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109038c6110a3565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061095e826110cb565b9050600061096e828787876110f8565b9050896001600160a01b0316816001600160a01b0316146109d15760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161069a565b6109dc8a8a8a610b79565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b600054610100900460ff1615808015610a335750600054600160ff909116105b80610a4d5750303b158015610a4d575060005460ff166001145b610ab05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161069a565b6000805460ff191660011790558015610ad3576000805461ff0019166101001790555b610adc84611120565b610ae6848461116a565b60cd80546001600160a01b0319166001600160a01b0384169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a28015610b73576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b038316610bdb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161069a565b6001600160a01b038216610c3c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161069a565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ca984846109e8565b90506000198114610b735781811015610d045760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069a565b610b738484848403610b79565b6001600160a01b038316610d755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161069a565b6001600160a01b038216610dd75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161069a565b6001600160a01b03831660009081526033602052604090205481811015610e4f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161069a565b6001600160a01b038085166000818152603360205260408082208686039055928616808252908390208054860190559151600080516020611acb83398151915290610e9d9086815260200190565b60405180910390a3610b73565b6001600160a01b038216610f0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161069a565b6001600160a01b03821660009081526033602052604090205481811015610f7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161069a565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611acb833981519152910160405180910390a3505050565b60006105c061119b565b6001600160a01b03821661102c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069a565b806035600082825461103e9190611946565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611acb833981519152910160405180910390a35050565b60606067805461039a906118e9565b60606068805461039a906118e9565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b60006104416110d8610fcc565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006111098787878761120f565b91509150611116816112c9565b5095945050505050565b600054610100900460ff166111475760405162461bcd60e51b815260040161069a90611959565b6106e781604051806040016040528060018152602001603160f81b81525061140e565b600054610100900460ff166111915760405162461bcd60e51b815260040161069a90611959565b61051a828261145d565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6111c661149d565b6111ce6114f6565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561123c57506000905060036112c0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611290573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112b9576000600192509250506112c0565b9150600090505b94509492505050565b60008160048111156112dd576112dd6119a4565b036112e55750565b60018160048111156112f9576112f96119a4565b036113415760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161069a565b6002816004811115611355576113556119a4565b036113a25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161069a565b60038160048111156113b6576113b66119a4565b036106e75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161069a565b600054610100900460ff166114355760405162461bcd60e51b815260040161069a90611959565b60676114418382611a0a565b50606861144e8282611a0a565b50506000606581905560665550565b600054610100900460ff166114845760405162461bcd60e51b815260040161069a90611959565b60366114908382611a0a565b5060376104288282611a0a565b6000806114a8611085565b8051909150156114bf578051602090910120919050565b60655480156114ce5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080611501611094565b805190915015611518578051602090910120919050565b60665480156114ce5792915050565b6000815180845260005b8181101561154d57602081850181015186830182015201611531565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115806020830184611527565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126115ae57600080fd5b813567ffffffffffffffff808211156115c9576115c9611587565b604051601f8301601f19908116603f011681019082821181831017156115f1576115f1611587565b8160405283815286602085880101111561160a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b038116811461164157600080fd5b919050565b60008060006060848603121561165b57600080fd5b833567ffffffffffffffff8082111561167357600080fd5b61167f8783880161159d565b9450602086013591508082111561169557600080fd5b506116a28682870161159d565b9250506116b16040850161162a565b90509250925092565b600080604083850312156116cd57600080fd5b6116d68361162a565b946020939093013593505050565b6000602082840312156116f657600080fd5b6115808261162a565b60008060006060848603121561171457600080fd5b61171d8461162a565b925061172b6020850161162a565b9150604084013590509250925092565b6000806040838503121561174e57600080fd5b8235915061175e6020840161162a565b90509250929050565b60008060006060848603121561177c57600080fd5b8335925061178c6020850161162a565b91506116b16040850161162a565b60ff60f81b881681526000602060e060208401526117bb60e084018a611527565b83810360408501526117cd818a611527565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561182157835183529284019291840191600101611805565b50909c9b505050505050505050505050565b60006020828403121561184557600080fd5b5035919050565b600080600080600080600060e0888a03121561186757600080fd5b6118708861162a565b965061187e6020890161162a565b95506040880135945060608801359350608088013560ff811681146118a257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156118d257600080fd5b6118db8361162a565b915061175e6020840161162a565b600181811c908216806118fd57607f821691505b6020821081036110c557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156104415761044161191d565b808201808211156104415761044161191d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b601f821115610428576000816000526020600020601f850160051c810160208610156119e35750805b601f850160051c820191505b81811015611a02578281556001016119ef565b505050505050565b815167ffffffffffffffff811115611a2457611a24611587565b611a3881611a3284546118e9565b846119ba565b602080601f831160018114611a6d5760008415611a555750858301515b600019600386901b1c1916600185901b178555611a02565b600085815260208120601f198616915b82811015611a9c57888601518255948401946001909101908401611a7d565b5085821015611aba5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c6343000819000a