0x608060405234801561001057600080fd5b506147c8806100206000396000f3fe60806040526004361061011f5760003560e01c8063b39e12cf116100a0578063ca15c87311610064578063ca15c87314610367578063d547741f14610387578063dd5b575f146103a7578063deb58cd9146103d4578063f2375e84146103e757600080fd5b8063b39e12cf146102a6578063bbb6f843146102c6578063be07f57c146102f3578063c03db34014610313578063c4d66de81461034757600080fd5b806336568abe116100e757806336568abe146101e95780639010d07c1461020957806391d1485414610241578063a217fddf14610271578063ab9131c71461028657600080fd5b8063064d763e146101245780631ad01e20146101465780631fa9a63514610166578063248a9ca3146101865780632f2ff15d146101c9575b600080fd5b34801561013057600080fd5b5061014461013f36600461393c565b610407565b005b34801561015257600080fd5b506101446101613660046139a2565b6109bb565b34801561017257600080fd5b506101446101813660046139fd565b610d21565b34801561019257600080fd5b506101b66101a1366004613a51565b60009081526065602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101d557600080fd5b506101446101e4366004613a6a565b610f71565b3480156101f557600080fd5b50610144610204366004613a6a565b610fff565b34801561021557600080fd5b50610229610224366004613a9a565b611079565b6040516001600160a01b0390911681526020016101c0565b34801561024d57600080fd5b5061026161025c366004613a6a565b61109a565b60405190151581526020016101c0565b34801561027d57600080fd5b506101b6600081565b34801561029257600080fd5b506101b66102a1366004613a9a565b6110b2565b3480156102b257600080fd5b50609754610229906001600160a01b031681565b3480156102d257600080fd5b506102e66102e1366004613a51565b6113c3565b6040516101c09190613b0c565b3480156102ff57600080fd5b5061014461030e36600461393c565b6115e0565b34801561031f57600080fd5b506101b67f1c6335fcc3b06b79e2f2ab0c4bce67da3200859f78d26db18dcf1b32f50a3cea81565b34801561035357600080fd5b50610144610362366004613b91565b611729565b34801561037357600080fd5b506101b6610382366004613a51565b6117e9565b34801561039357600080fd5b506101446103a2366004613a6a565b611800565b3480156103b357600080fd5b506103c76103c2366004613bb5565b611881565b6040516101c09190613be7565b6101446103e2366004613c26565b61193a565b3480156103f357600080fd5b50610261610402366004613d1a565b611b71565b604080518082018252600c81526b29b5b0b632a6b0b730b3b2b960a11b60208201526097549151633581777360e01b8152909133916001600160a01b039091169063358177739061045c908590600401613be7565b602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190613d96565b6001600160a01b031614806104b557506104b5612140565b6104da5760405162461bcd60e51b81526004016104d190613db3565b60405180910390fd5b609754604051633581777360e01b81526000916001600160a01b03169063358177739061050990600401613de6565b602060405180830381865afa158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a9190613d96565b905060008484604051602001610561929190613e0c565b60408051601f19818403018152908290528051602090910120609754633581777360e01b83529092506000916001600160a01b03909116906335817773906105ab90600401613e1c565b602060405180830381865afa1580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec9190613d96565b604051636ba6351960e11b8152600481018490529091506001600160a01b0382169063d74c6a3290602401602060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190613e3e565b156106935760405162461bcd60e51b815260206004820152600b60248201526a444b47207375636365737360a81b60448201526064016104d1565b609754604051633581777360e01b81526000916001600160a01b0316906335817773906106c290600401613e60565b602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107039190613d96565b60405163351ad2c160e11b8152600481018590529091506001600160a01b03821690636a35a58290602401602060405180830381865afa15801561074b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076f9190613e3e565b6107c95760405162461bcd60e51b815260206004820152602560248201527f4e6f2066726565204e6f64657320666f72206e65772067726f757020666f726d60448201526430ba34b7b760d91b60648201526084016104d1565b6000846001600160a01b031663142658fa846001600160a01b03166379f74fe7876040518263ffffffff1660e01b815260040161080891815260200190565b602060405180830381865afa158015610825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108499190613e89565b6040516001600160e01b031960e084901b16815260048101919091526024810187905260006044820152600160648201526084016020604051808303816000875af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190613e89565b604051630cfb49c560e31b8152600481018690529091506001600160a01b038416906367da4e2890602401600060405180830381600087803b15801561090557600080fd5b505af1158015610919573d6000803e3d6000fd5b50506040516338d769ff60e21b8152600481018790526001600160a01b038616925063e35da7fc9150602401600060405180830381600087803b15801561095f57600080fd5b505af1158015610973573d6000803e3d6000fd5b505060408051878152602081018590527f5bfe8a52ad26ac6ee7b0cd46d2fd92be04735a31c45ef8aa3d4b7ea1b61bbc1f935001905060405180910390a15050505050505050565b604080518082018252600c81526b29b5b0b632a6b0b730b3b2b960a11b60208201526097549151633581777360e01b8152909133916001600160a01b0390911690633581777390610a10908590600401613be7565b602060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190613d96565b6001600160a01b03161480610a695750610a69612140565b610a855760405162461bcd60e51b81526004016104d190613db3565b6000610a93838501856140d2565b90506000609760009054906101000a90046001600160a01b03166001600160a01b031663fcaa57a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190613d96565b90506000816001600160a01b03166303e3f6876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b749190613e89565b90506000826001600160a01b03166346ea74666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bda9190613e89565b905081421015610c385760405162461bcd60e51b8152602060048201526024808201527f4974206973206e6f7420612074696d6520666f72206372656174696e672053636044820152633430b4b760e11b60648201526084016104d1565b8351811115610c9d5760405162461bcd60e51b815260206004820152602b60248201527f4d696e696d616c2073636861696e206c69666574696d652073686f756c64206260448201526a19481cd85d1a5cd99a595960aa1b60648201526084016104d1565b87610cb3856020015160ff1686600001516110b2565b1115610d0b5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420656e6f756768206d6f6e657920746f206372656174652053636861696044820152603760f91b60648201526084016104d1565b610d16898986612151565b505050505050505050565b604080518082018252600c81526b29b5b0b632a6b0b730b3b2b960a11b60208201526097549151633581777360e01b8152909133916001600160a01b0390911690633581777390610d76908590600401613be7565b602060405180830381865afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db79190613d96565b6001600160a01b03161480610dcf5750610dcf612140565b610deb5760405162461bcd60e51b81526004016104d190613db3565b609754604051633581777360e01b81526000916001600160a01b031690633581777390610e1a90600401613e60565b602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190613d96565b905060008484604051602001610e72929190613e0c565b60408051808303601f190181529082905280516020909101206347bf280560e11b82526001600160a01b03888116600484015260248301829052909250831690638f7e500a90604401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190613e3e565b610f5e5760405162461bcd60e51b815260206004820152602d60248201527f4d6573736167652073656e646572206973206e6f7420746865206f776e65722060448201526c37b3103a34329029b1b430b4b760991b60648201526084016104d1565b610f69858584612417565b505050505050565b600082815260656020526040902060020154610f8d903361109a565b610ff15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016104d1565b610ffb8282612b33565b5050565b6001600160a01b038116331461106f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104d1565b610ffb8282612b8c565b60008281526065602052604081206110919083612be5565b90505b92915050565b60008281526065602052604081206110919083612bf1565b600080609760009054906101000a90046001600160a01b03166001600160a01b031663fcaa57a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c9190613d96565b609754604051633581777360e01b81529192506000916001600160a01b039091169063358177739061116090600401613e60565b602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190613d96565b90506000826001600160a01b0316630b0d21736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112079190613e89565b9050600080836001600160a01b0316636a58b9d6896040518263ffffffff1660e01b815260040161123a91815260200190565b6040805180830381865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061419f565b9250905060ff811660000361129e57670de0b6b3a764000095505050505050611094565b6000876112ab84866141e3565b6112b591906141e3565b6112c09060026141e3565b905060008260ff16876001600160a01b0316638906e86b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a91906141fa565b63ffffffff16886001600160a01b031663786a46eb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190614220565b60ff1661139f91906141e3565b6113a9919061423d565b90506113b5818361423d565b975050505050505050611094565b6000818152609860205260408120606091906113de90612c13565b6001600160401b038111156113f5576113f5613ea2565b60405190808252806020026020018201604052801561143a57816020015b60408051808201909152606080825260208201528152602001906001900390816114135790505b50905060005b81518110156115d95760008481526099602090815260408083206098909252822090919061146e9084612be5565b81526020019081526020016000206040518060400160405290816000820180546114979061425f565b80601f01602080910402602001604051908101604052809291908181526020018280546114c39061425f565b80156115105780601f106114e557610100808354040283529160200191611510565b820191906000526020600020905b8154815290600101906020018083116114f357829003601f168201915b505050505081526020016001820180546115299061425f565b80601f01602080910402602001604051908101604052809291908181526020018280546115559061425f565b80156115a25780601f10611577576101008083540402835291602001916115a2565b820191906000526020600020905b81548152906001019060200180831161158557829003601f168201915b5050505050815250508282815181106115bd576115bd614299565b6020026020010181905250806115d2906142af565b9050611440565b5092915050565b604080518082018252600c81526b29b5b0b632a6b0b730b3b2b960a11b60208201526097549151633581777360e01b8152909133916001600160a01b0390911690633581777390611635908590600401613be7565b602060405180830381865afa158015611652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116769190613d96565b6001600160a01b0316148061168e575061168e612140565b6116aa5760405162461bcd60e51b81526004016104d190613db3565b609754604051633581777360e01b815261172491859185916001600160a01b0316906335817773906116de90600401613e60565b602060405180830381865afa1580156116fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171f9190613d96565b612417565b505050565b600054610100900460ff16158080156117495750600054600160ff909116105b8061176a575061175830612c1d565b15801561176a575060005460ff166001145b6117865760405162461bcd60e51b81526004016104d1906142c8565b6000805460ff1916600117905580156117a9576000805461ff0019166101001790555b6117b282612c2c565b8015610ffb576000805461ff0019169055604051600181526000805160206147738339815191529060200160405180910390a15050565b600081815260656020526040812061109490612c13565b60008281526065602052604090206002015461181c903361109a565b61106f5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016104d1565b606060008383604051602001611898929190613e0c565b60408051601f19818403018152908290528051602090910120609754633581777360e01b83529092506000916001600160a01b03909116906335817773906118e290600401613e60565b602060405180830381865afa1580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119239190613d96565b9050611930868383612cc8565b9695505050505050565b6119647f1c6335fcc3b06b79e2f2ab0c4bce67da3200859f78d26db18dcf1b32f50a3cea3361109a565b6119c25760405162461bcd60e51b815260206004820152602960248201527f53656e646572206973206e6f7420617574686f72697a656420746f20637265616044820152683a329039b1b430b4b760b91b60648201526084016104d1565b60006040518060c001604052808b81526020018a60ff1681526020018961ffff16815260200188888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506001600160a01b0386166020820152604001611a3d8486614316565b9052905060006001600160a01b03861615611a59575084611a5c565b50335b611a6881600084612151565b60008888604051602001611a7d929190613e0c565b60408051601f19818403018152908290528051602090910120609754633581777360e01b83529092506001600160a01b031690633581777390611ac290600401614323565b602060405180830381865afa158015611adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b039190613d96565b6001600160a01b031663b0567d1634836040518363ffffffff1660e01b8152600401611b3191815260200190565b6000604051808303818588803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b5050505050505050505050505050505050565b609754604051633581777360e01b815260206004820152600d60248201526c29b5b0b632ab32b934b334b2b960991b604482015260009182916001600160a01b0390911690633581777390606401602060405180830381865afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c009190613d96565b90506000611c0c612e5f565b905060008585604051602001611c23929190613e0c565b60408051601f19818403018152908290528051602090910120609754633581777360e01b83529092506001600160a01b031690633581777390611c6890600401613de6565b602060405180830381865afa158015611c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca99190613d96565b6001600160a01b031663f7d279c6826040518263ffffffff1660e01b8152600401611cd691815260200190565b602060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613e3e565b8015611dfb5750609754604051633581777360e01b81526001600160a01b0390911690633581777390611d4c90600401613de6565b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613d96565b6001600160a01b0316638323df53826040518263ffffffff1660e01b8152600401611dba91815260200190565b602060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb9190613e3e565b8015611edf5750609754604051633581777360e01b81526001600160a01b0390911690633581777390611e3090600401613e1c565b602060405180830381865afa158015611e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e719190613d96565b6001600160a01b031663d74c6a32826040518263ffffffff1660e01b8152600401611e9e91815260200190565b602060405180830381865afa158015611ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edf9190613e3e565b15611fc857609754604051633581777360e01b81526001600160a01b0390911690633581777390611f1290600401614344565b602060405180830381865afa158015611f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f539190613d96565b6001600160a01b03166398bfc90f826040518263ffffffff1660e01b8152600401611f8091815260200190565b608060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190614398565b91506120a8565b609754604051633581777360e01b81526001600160a01b0390911690633581777390611ff690600401614344565b602060405180830381865afa158015612013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120379190613d96565b6001600160a01b0316636be84174826040518263ffffffff1660e01b815260040161206491815260200190565b608060405180830381865afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a59190614398565b91505b6040805180820182528d8152602081018d9052905163012243e760e61b81526001600160a01b03851691634890f9c0916120ef91908e908e908e908e908a906004016143d7565b602060405180830381865afa15801561210c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121309190613e3e565b9c9b505050505050505050505050565b600061214c813361109a565b905090565b609754604051633581777360e01b81526000916001600160a01b03169063358177739061218090600401613e60565b602060405180830381865afa15801561219d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c19190613d96565b90506121d982608001516001600160a01b0316612c1d565b156122385760405162461bcd60e51b815260206004820152602960248201527f4f726967696e61746f722061646472657373206d757374206265206e6f7420616044820152680818dbdb9d1c9858dd60ba1b60648201526084016104d1565b61224a846001600160a01b0316612c1d565b156122b95760808201516001600160a01b03166122b45760405162461bcd60e51b815260206004820152602260248201527f4f726967696e61746f722061646472657373206973206e6f742070726f766964604482015261195960f21b60648201526084016104d1565b6122c1565b600060808301525b6122e08260600151858460800151868660000151868860a00151612ea1565b602082015160405163352c5ceb60e11b815260ff909116600482015260009081906001600160a01b03841690636a58b9d6906024016040805180830381865afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612355919061419f565b6060860151604051919450919250612394919061237690829060200161443c565b60405160208183030381529060405280519060200120848487613035565b7fb8318899bc2ead04222ed7ef62d5b7e69a88671a5b67a69cb1dfb9b60b3411b9846060015187838760000151868a8a604001518b606001516040516020016123dd919061443c565b60405160208183030381529060405280519060200120604051612407989796959493929190614458565b60405180910390a1505050505050565b609754604051633581777360e01b81526000916001600160a01b03169063358177739061244690600401613de6565b602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124879190613d96565b90506000848460405160200161249e929190613e0c565b60408051808303601f19018152908290528051602090910120631a96837560e01b82526004820181905291506001600160a01b03841690631a96837590602401602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613e3e565b6125635760405162461bcd60e51b815260206004820152601560248201527414d8da185a5b88191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016104d1565b61256d81846131b9565b60405163b70a422360e01b8152600481018290526000906001600160a01b0385169063b70a422390602401600060405180830381865afa1580156125b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125dd91908101906144b3565b905060005b81518110156127e157604051630de53bd360e21b815260048101849052602481018290526001600160a01b03861690633794ef4c90604401602060405180830381865afa158015612637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265b9190613e3e565b6127cf57846001600160a01b031663061291c683838151811061268057612680614299565b6020026020010151856040518363ffffffff1660e01b81526004016126af929190918252602082015260400190565b602060405180830381865afa1580156126cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f09190613e3e565b61274c5760405162461bcd60e51b815260206004820152602760248201527f536f6d65204e6f646520646f6573206e6f7420636f6e7461696e20676976656e6044820152661029b1b430b4b760c91b60648201526084016104d1565b846001600160a01b031663ab11f77683838151811061276d5761276d614299565b6020026020010151856040518363ffffffff1660e01b815260040161279c929190918252602082015260400190565b600060405180830381600087803b1580156127b657600080fd5b505af11580156127ca573d6000803e3d6000fd5b505050505b806127d9816142af565b9150506125e2565b50604051632b8dc2d760e01b8152600481018390526001600160a01b03851690632b8dc2d790602401600060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b505060405163e57097c960e01b8152600481018590526001600160a01b038716925063e57097c99150602401600060405180830381600087803b15801561287e57600080fd5b505af1158015612892573d6000803e3d6000fd5b505060405163254489d360e11b815260048101859052600092506001600160a01b0387169150634a8913a690602401602060405180830381865afa1580156128de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129029190613d96565b6040516351b8d6b160e11b8152600481018590529091506001600160a01b0386169063a371ad6290602401600060405180830381600087803b15801561294757600080fd5b505af115801561295b573d6000803e3d6000fd5b50506040516302d42f2760e01b8152600481018690526001600160a01b03871692506302d42f279150602401600060405180830381600087803b1580156129a157600080fd5b505af11580156129b5573d6000803e3d6000fd5b5050604051630fdf844960e31b8152600481018690526001600160a01b03848116602483015288169250637efc22489150604401600060405180830381600087803b158015612a0357600080fd5b505af1158015612a17573d6000803e3d6000fd5b5050609754604051633581777360e01b81526001600160a01b03909116925063358177739150612a4990600401614323565b602060405180830381865afa158015612a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8a9190613d96565b604051634c509cab60e11b81526001600160a01b0383811660048301526024820186905291909116906398a1395690604401600060405180830381600087803b158015612ad657600080fd5b505af1158015612aea573d6000803e3d6000fd5b50505050827f7273d5b566a2c3f559e2187564c8889b359301814a6e170167bd0eaaa130f345828989604051612b2293929190614543565b60405180910390a250505050505050565b6000828152606560205260409020612b4b908261330e565b15610ffb5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000828152606560205260409020612ba49082613323565b15610ffb5760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b60006110918383613338565b6001600160a01b03811660009081526001830160205260408120541515611091565b6000611094825490565b6001600160a01b03163b151590565b600054610100900460ff1615808015612c4c5750600054600160ff909116105b80612c6d5750612c5b30612c1d565b158015612c6d575060005460ff166001145b612c895760405162461bcd60e51b81526004016104d1906142c8565b6000805460ff191660011790558015612cac576000805461ff0019166101001790555b612cb4613362565b612cbf600033610ff1565b6117b28261342a565b60608184816001600160a01b0316631a968375826040518263ffffffff1660e01b8152600401612cfa91815260200190565b602060405180830381865afa158015612d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3b9190613e3e565b612d575760405162461bcd60e51b81526004016104d190614583565b6000868152609860205260409020612d6f9086613505565b612daf5760405162461bcd60e51b815260206004820152601160248201527013dc1d1a5bdb881a5cc81b9bdd081cd95d607a1b60448201526064016104d1565b600086815260996020908152604080832088845290915290206001018054612dd69061425f565b80601f0160208091040260200160405190810160405280929190818152602001828054612e029061425f565b8015612e4f5780601f10612e2457610100808354040283529160200191612e4f565b820191906000526020600020905b815481529060010190602001808311612e3257829003601f168201915b5050505050925050509392505050565b612e67613862565b5060408051608081018252600081830181815260608301829052825282518084019093526001835260208381019190915281019190915290565b604051639dc254db60e01b81526001600160a01b03831690639dc254db90612ecd908a90600401613be7565b602060405180830381865afa158015612eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0e9190613e3e565b612f5a5760405162461bcd60e51b815260206004820152601c60248201527f53636861696e206e616d65206973206e6f7420617661696c61626c650000000060448201526064016104d1565b600087604051602001612f6d919061443c565b60405160208183030381529060405280519060200120905060005b8251811015612fc457612fb482848381518110612fa757612fa7614299565b602002602001015161351d565b612fbd816142af565b9050612f88565b5060405163525f10d160e11b81526001600160a01b0384169063a4be21a290612ff9908b908b908b908a908c906004016145b6565b600060405180830381600087803b15801561301357600080fd5b505af1158015613027573d6000803e3d6000fd5b505050505050505050505050565b604051630f466cbf60e41b8152600481018590526024810184905260ff831660448201526000906001600160a01b0383169063f466cbf0906064016000604051808303816000875af115801561308f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130b791908101906144b3565b609754604051633581777360e01b81529192506001600160a01b0316906335817773906130e690600401613e1c565b602060405180830381865afa158015613103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131279190613d96565b6001600160a01b031663e35da7fc866040518263ffffffff1660e01b815260040161315491815260200190565b600060405180830381600087803b15801561316e57600080fd5b505af1158015613182573d6000803e3d6000fd5b505050507f1e749668fd6d26fb8333b9bf137b81dd40c05a610f8e32df22f5f2cde24b8d05868683604051612407939291906145f6565b604051631a96837560e01b815260048101839052819083906001600160a01b03831690631a96837590602401602060405180830381865afa158015613202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132269190613e3e565b6132425760405162461bcd60e51b81526004016104d190614583565b600084815260986020526040812061325990612c13565b11156133085760008481526098602052604081206132779082612be5565b6000868152609960209081526040808320848452909152812091925061329d82826138a6565b6132ab6001830160006138a6565b505060008581526098602052604090206132c590826135ec565b6133025760405162461bcd60e51b815260206004820152600e60248201526d2932b6b7bb34b7339032b93937b960911b60448201526064016104d1565b50613242565b50505050565b6000611091836001600160a01b0384166135f8565b6000611091836001600160a01b038416613647565b600082600001828154811061334f5761334f614299565b9060005260206000200154905092915050565b600054610100900460ff16158080156133825750600054600160ff909116105b806133a3575061339130612c1d565b1580156133a3575060005460ff166001145b6133bf5760405162461bcd60e51b81526004016104d1906142c8565b6000805460ff1916600117905580156133e2576000805461ff0019166101001790555b6133ea61373a565b6133f26137a7565b8015613427576000805461ff001916905560405160018152600080516020614773833981519152906020015b60405180910390a15b50565b6001600160a01b03811661348b5760405162461bcd60e51b815260206004820152602260248201527f436f6e74726163744d616e616765722061646472657373206973206e6f742073604482015261195d60f21b60648201526084016104d1565b61349d816001600160a01b0316612c1d565b6134e35760405162461bcd60e51b81526020600482015260176024820152761059191c995cdcc81a5cc81b9bdd0818dbdb9d1c9858dd604a1b60448201526064016104d1565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526001830160205260408120541515611091565b80516040516000916135319160200161443c565b60408051601f1981840301815291815281516020928301206000868152609984528281208282529093529120835191925083918190613570908261468a565b5060208201516001820190613585908261468a565b50505060008381526098602052604090206135a09082613856565b6117245760405162461bcd60e51b815260206004820152601f60248201527f546865206f7074696f6e20686173206265656e2073657420616c72656164790060448201526064016104d1565b60006110918383613647565b600081815260018301602052604081205461363f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611094565b506000611094565b6000818152600183016020526040812054801561373057600061366b600183614749565b855490915060009061367f90600190614749565b90508181146136e457600086600001828154811061369f5761369f614299565b90600052602060002001549050808760000184815481106136c2576136c2614299565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806136f5576136f561475c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611094565b6000915050611094565b600054610100900460ff166137a55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104d1565b565b600054610100900460ff16158080156137c75750600054600160ff909116105b806137e857506137d630612c1d565b1580156137e8575060005460ff166001145b6138045760405162461bcd60e51b81526004016104d1906142c8565b6000805460ff1916600117905580156133f2576000805461ff0019166101001790558015613427576000805461ff0019169055604051600181526000805160206147738339815191529060200161341e565b600061109183836135f8565b604080516080810182526000918101828152606082019290925290819081526020016138a1604051806040016040528060008152602001600081525090565b905290565b5080546138b29061425f565b6000825580601f106138c2575050565b601f01602090049060005260206000209081019061342791905b808211156138f057600081556001016138dc565b5090565b60008083601f84011261390657600080fd5b5081356001600160401b0381111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b6000806020838503121561394f57600080fd5b82356001600160401b0381111561396557600080fd5b613971858286016138f4565b90969095509350505050565b6001600160a01b038116811461342757600080fd5b803561399d8161397d565b919050565b600080600080606085870312156139b857600080fd5b84356139c38161397d565b93506020850135925060408501356001600160401b038111156139e557600080fd5b6139f1878288016138f4565b95989497509550505050565b600080600060408486031215613a1257600080fd5b8335613a1d8161397d565b925060208401356001600160401b03811115613a3857600080fd5b613a44868287016138f4565b9497909650939450505050565b600060208284031215613a6357600080fd5b5035919050565b60008060408385031215613a7d57600080fd5b823591506020830135613a8f8161397d565b809150509250929050565b60008060408385031215613aad57600080fd5b50508035926020909101359150565b60005b83811015613ad7578181015183820152602001613abf565b50506000910152565b60008151808452613af8816020860160208601613abc565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613b8357888303603f1901855281518051878552613b5788860182613ae0565b91890151858303868b0152919050613b6f8183613ae0565b968901969450505090860190600101613b33565b509098975050505050505050565b600060208284031215613ba357600080fd5b8135613bae8161397d565b9392505050565b600080600060408486031215613bca57600080fd5b8335925060208401356001600160401b03811115613a3857600080fd5b6020815260006110916020830184613ae0565b60ff8116811461342757600080fd5b803561399d81613bfa565b803561ffff8116811461399d57600080fd5b600080600080600080600080600060e08a8c031215613c4457600080fd5b8935985060208a0135613c5681613bfa565b9750613c6460408b01613c14565b965060608a01356001600160401b0380821115613c8057600080fd5b613c8c8d838e016138f4565b909850965060808c01359150613ca18261397d565b90945060a08b013590613cb38261397d565b90935060c08b01359080821115613cc957600080fd5b818c0191508c601f830112613cdd57600080fd5b813581811115613cec57600080fd5b8d60208260051b8501011115613d0157600080fd5b6020830194508093505050509295985092959850929598565b60008060008060008060008060e0898b031215613d3657600080fd5b883597506020890135965060408901359550606089013594506080890135935060a0890135925060c08901356001600160401b03811115613d7657600080fd5b613d828b828c016138f4565b999c989b5096995094979396929594505050565b600060208284031215613da857600080fd5b8151613bae8161397d565b60208082526019908201527813595cdcd859d9481cd95b99195c881a5cc81a5b9d985b1a59603a1b604082015260600190565b6020808252600c908201526b2737b232a937ba30ba34b7b760a11b604082015260600190565b8183823760009101908152919050565b602080825260089082015267536b616c65444b4760c01b604082015260600190565b600060208284031215613e5057600080fd5b81518015158114613bae57600080fd5b6020808252600f908201526e14d8da185a5b9cd25b9d195c9b985b608a1b604082015260600190565b600060208284031215613e9b57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b60006001600160401b03831115613f4b57613f4b613ea2565b613f5e601f8401601f1916602001613f02565b9050828152838383011115613f7257600080fd5b828260208301376000602084830101529392505050565b600082601f830112613f9a57600080fd5b61109183833560208501613f32565b60006001600160401b03821115613fc257613fc2613ea2565b5060051b60200190565b6000613fdf613fda84613fa9565b613f02565b8381529050602080820190600585901b840186811115613ffe57600080fd5b845b818110156140a75780356001600160401b03808211156140205760008081fd5b908701906040828b0312156140355760008081fd5b61403d613eb8565b82358281111561404d5760008081fd5b6140598c828601613f89565b825250858301358281111561406e5760008081fd5b8084019350508a601f84011261408657600091508182fd5b6140948b8435888601613f32565b8187015286525050928201928201614000565b505050509392505050565b600082601f8301126140c357600080fd5b61109183833560208501613fcc565b6000602082840312156140e457600080fd5b81356001600160401b03808211156140fb57600080fd5b9083019060c0828603121561410f57600080fd5b614117613ee0565b8235815261412760208401613c09565b602082015261413860408401613c14565b604082015260608301358281111561414f57600080fd5b61415b87828601613f89565b60608301525061416d60808401613992565b608082015260a08301358281111561418457600080fd5b614190878286016140b2565b60a08301525095945050505050565b600080604083850312156141b257600080fd5b82516141bd81613bfa565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611094576110946141cd565b60006020828403121561420c57600080fd5b815163ffffffff81168114613bae57600080fd5b60006020828403121561423257600080fd5b8151613bae81613bfa565b60008261425a57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061427357607f821691505b60208210810361429357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016142c1576142c16141cd565b5060010190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000611091368484613fcc565b60208082526007908201526657616c6c65747360c81b604082015260600190565b6020808252600a90820152694b657953746f7261676560b01b604082015260600190565b60006040828403121561437a57600080fd5b614382613eb8565b9050815181526020820151602082015292915050565b6000608082840312156143aa57600080fd5b6143b2613eb8565b6143bc8484614368565b81526143cb8460408501614368565b60208201529392505050565b865181526020808801519082015261014081018660408301528560608301528460808301528360a083015261441a60c08301845180518252602090810151910152565b6020928301518051610100840152909201516101209091015295945050505050565b6000825161444e818460208701613abc565b9190910192915050565b600061010080835261446c8184018c613ae0565b6001600160a01b039a909a166020840152505060ff9690961660408701526060860194909452608085019290925260a084015261ffff1660c083015260e090910152919050565b600060208083850312156144c657600080fd5b82516001600160401b038111156144dc57600080fd5b8301601f810185136144ed57600080fd5b80516144fb613fda82613fa9565b81815260059190911b8201830190838101908783111561451a57600080fd5b928401925b828410156145385783518252928401929084019061451f565b979650505050505050565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b602080825260199082015278151a19481cd8da185a5b88191bd95cc81b9bdd08195e1a5cdd603a1b604082015260600190565b60a0815260006145c960a0830188613ae0565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b6060815260006146096060830186613ae0565b6020838101869052838203604085015284518083528582019282019060005b81811015613b8357845183529383019391830191600101614628565b601f82111561172457600081815260208120601f850160051c8101602086101561466b5750805b601f850160051c820191505b81811015610f6957828155600101614677565b81516001600160401b038111156146a3576146a3613ea2565b6146b7816146b1845461425f565b84614644565b602080601f8311600181146146ec57600084156146d45750858301515b600019600386901b1c1916600185901b178555610f69565b600085815260208120601f198616915b8281101561471b578886015182559484019460019091019084016146fc565b50858210156147395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115611094576110946141cd565b634e487b7160e01b600052603160045260246000fdfe7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498a2646970667358221220bc1b984e1b6a8f3ac04eba23beebdaefad673f868a17891572cd4454937890e464736f6c63430008110033