0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61286b80620000f46000396000f3fe6080604052600436106102255760003560e01c80636352211e1161012357806395d89b41116100ab578063c87b56dd1161006f578063c87b56dd14610631578063d5abeb0114610651578063da3ef23f14610667578063e985e9c514610687578063f2fde38b146106a757600080fd5b806395d89b41146105b1578063a22cb465146105c6578063a4f4f8af146105e6578063b88d4fde146105fc578063c66828621461061c57600080fd5b8063715018a6116100f2578063715018a61461050e57806372d8ff051461052357806380a0bcc6146105535780638da5cb5b146105735780639498bd711461059157600080fd5b80636352211e146104995780636c0360eb146104b95780636f8b44b0146104ce57806370a08231146104ee57600080fd5b806323b872dd116101b157806342842e0e1161017557806342842e0e146103f2578063438b63001461041257806344a0d68a1461043f57806355f804b31461045f5780635c975abb1461047f57600080fd5b806323b872dd146103745780632b1fe0ef14610394578063311137f2146103aa5780633ccfd60b146103ca57806340c10f19146103df57600080fd5b8063095ea7b3116101f8578063095ea7b3146102db5780630b24f435146102fb57806313faede61461031a578063154002ee1461033e57806318160ddd1461035e57600080fd5b806301ffc9a71461022a57806302329a291461025f57806306fdde0314610281578063081812fc146102a3575b600080fd5b34801561023657600080fd5b5061024a610245366004611f47565b6106c7565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027f61027a366004611f72565b6106d8565b005b34801561028d57600080fd5b506102966106f3565b6040516102569190611fdf565b3480156102af57600080fd5b506102c36102be366004611ff2565b610785565b6040516001600160a01b039091168152602001610256565b3480156102e757600080fd5b5061027f6102f6366004612027565b6107ac565b34801561030757600080fd5b5060d15461024a90610100900460ff1681565b34801561032657600080fd5b5061033060cd5481565b604051908152602001610256565b34801561034a57600080fd5b5061027f610359366004611f72565b6107c5565b34801561036a57600080fd5b5061033060ce5481565b34801561038057600080fd5b5061027f61038f366004612051565b6107e7565b3480156103a057600080fd5b5061033060cb5481565b3480156103b657600080fd5b5061027f6103c536600461208d565b610812565b3480156103d657600080fd5b5061027f6109d9565b61027f6103ed366004612027565b610a39565b3480156103fe57600080fd5b5061027f61040d366004612051565b610aea565b34801561041e57600080fd5b5061043261042d366004612124565b610b0f565b604051610256919061213f565b34801561044b57600080fd5b5061027f61045a366004611ff2565b610bef565b34801561046b57600080fd5b5061027f61047a366004612183565b610bfc565b34801561048b57600080fd5b5060d15461024a9060ff1681565b3480156104a557600080fd5b506102c36104b4366004611ff2565b610c11565b3480156104c557600080fd5b50610296610c71565b3480156104da57600080fd5b5061027f6104e9366004611ff2565b610cff565b3480156104fa57600080fd5b50610330610509366004612124565b610d0c565b34801561051a57600080fd5b5061027f610d92565b34801561052f57600080fd5b5061024a61053e366004611ff2565b60cc6020526000908152604090205460ff1681565b34801561055f57600080fd5b5061027f61056e366004611ff2565b610da6565b34801561057f57600080fd5b506033546001600160a01b03166102c3565b34801561059d57600080fd5b5061027f6105ac366004611ff2565b610db3565b3480156105bd57600080fd5b50610296610f71565b3480156105d257600080fd5b5061027f6105e13660046121f5565b610f80565b3480156105f257600080fd5b5061033060d05481565b34801561060857600080fd5b5061027f610617366004612242565b610f94565b34801561062857600080fd5b50610296610fc1565b34801561063d57600080fd5b5061029661064c366004611ff2565b610fce565b34801561065d57600080fd5b5061033060cf5481565b34801561067357600080fd5b5061027f610682366004612183565b6110ac565b34801561069357600080fd5b5061024a6106a236600461231e565b6110c1565b3480156106b357600080fd5b5061027f6106c2366004612124565b6110ef565b60006106d282611165565b92915050565b6106e06111b5565b60d1805460ff1916911515919091179055565b60606097805461070290612351565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612351565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050905090565b60006107908261120f565b506000908152609b60205260409020546001600160a01b031690565b816107b68161126e565b6107c08383611327565b505050565b6107cd6111b5565b60d180549115156101000261ff0019909216919091179055565b826001600160a01b0381163314610801576108013361126e565b61080c848484611437565b50505050565b60d154610100900460ff161561082757600080fd5b60cf548460ce5461083891906123a1565b111561084357600080fd5b600083815260cc602052604090205460ff161561085f57600080fd5b6101c28460d05461087091906123a1565b111561087b57600080fd5b60408051602081018590526bffffffffffffffffffffffff19606088901b1691810191909152605481018590526000906074016040516020818303038152906040528051906020012090506109078383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060cb549150849050611468565b6109625760405162461bcd60e51b815260206004820152602160248201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666044820152601760f91b60648201526084015b60405180910390fd5b600084815260cc60205260408120805460ff191660011790555b858110156109d05760ce8054906000610994836123b4565b91905055508560d060008282546109ab91906123a1565b925050819055506109be8760ce5461147e565b806109c8816123b4565b91505061097c565b50505050505050565b6109e16111b5565b604051600090339047908381818185875af1925050503d8060008114610a23576040519150601f19603f3d011682016040523d82523d6000602084013e610a28565b606091505b5050905080610a3657600080fd5b50565b6033546001600160a01b03163314610ac5578060cd54610a5991906123cd565b341015610a6557600080fd5b60d15460ff1615610a7557600080fd5b60cf5460ce54610a869060016123a1565b1115610a9157600080fd5b6101c28160d054610aa291906123a1565b1115610aad57600080fd5b8060d06000828254610abf91906123a1565b90915550505b60ce8054906000610ad5836123b4565b9190505550610ae68260ce5461147e565b5050565b826001600160a01b0381163314610b0457610b043361126e565b61080c8484846115c0565b60606000610b1c83610d0c565b905060008167ffffffffffffffff811115610b3957610b3961222c565b604051908082528060200260200182016040528015610b62578160200160208202803683370190505b509050600160005b8381108015610b7b575060cf548211155b15610be5576000610b8b83610c11565b9050866001600160a01b0316816001600160a01b031603610bd25782848381518110610bb957610bb96123e4565b602090810291909101015281610bce816123b4565b9250505b82610bdc816123b4565b93505050610b6a565b5090949350505050565b610bf76111b5565b60cd55565b610c046111b5565b60c96107c0828483612440565b6000818152609960205260408120546001600160a01b0316806106d25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610959565b60c98054610c7e90612351565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa90612351565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b505050505081565b610d076111b5565b60cf55565b60006001600160a01b038216610d765760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610959565b506001600160a01b03166000908152609a602052604090205490565b610d9a6111b5565b610da460006115db565b565b610dae6111b5565b60cb55565b600054610100900460ff1615808015610dd35750600054600160ff909116105b80610ded5750303b158015610ded575060005460ff166001145b610e505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610959565b6000805460ff191660011790558015610e73576000805461ff0019166101001790555b610ebf6040518060400160405280600e81526020016d54726962616c205472696275746560901b815250604051806040016040528060048152602001632a2924a160e11b81525061162d565b610ec761165e565b610ecf61168d565b60cb829055660aa87bee53800060cd556101f460cf5560408051606081019091526023808252612813602083013960c990610f0a9082612500565b5060408051602081019091526000815260ca90610f279082612500565b508015610ae6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606098805461070290612351565b81610f8a8161126e565b6107c083836116d3565b836001600160a01b0381163314610fae57610fae3361126e565b610fba858585856116de565b5050505050565b60ca8054610c7e90612351565b6000818152609960205260409020546060906001600160a01b031661104d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610959565b6000611057611710565b9050600081511161107757604051806020016040528060008152506110a5565b806110818461171f565b60ca604051602001611095939291906125c0565b6040516020818303038152906040525b9392505050565b6110b46111b5565b60ca6107c0828483612440565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205460ff1690565b6110f76111b5565b6001600160a01b03811661115c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610959565b610a36816115db565b60006001600160e01b031982166380ac58cd60e01b148061119657506001600160e01b03198216635b5e139f60e01b145b806106d257506301ffc9a760e01b6001600160e01b03198316146106d2565b6033546001600160a01b03163314610da45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610959565b6000818152609960205260409020546001600160a01b0316610a365760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610959565b6daaeb6d7670e522a718067333cd4e3b15610a3657604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190612660565b610a3657604051633b79c77360e21b81526001600160a01b0382166004820152602401610959565b600061133282610c11565b9050806001600160a01b0316836001600160a01b03160361139f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610959565b336001600160a01b03821614806113bb57506113bb81336110c1565b61142d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610959565b6107c08383611828565b6114413382611896565b61145d5760405162461bcd60e51b81526004016109599061267d565b6107c08383836118f4565b6000826114758584611a9f565b14949350505050565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610959565b6000818152609960205260409020546001600160a01b0316156115395760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610959565b6001600160a01b0382166000908152609a602052604081208054600192906115629084906123a1565b909155505060008181526099602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6107c083838360405180602001604052806000815250610f94565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166116545760405162461bcd60e51b8152600401610959906126ca565b610ae68282611aec565b600054610100900460ff166116855760405162461bcd60e51b8152600401610959906126ca565b610da4611b2c565b600054610100900460ff166116b45760405162461bcd60e51b8152600401610959906126ca565b610da4733cc6cdda760b79bafa08df41ecfa224f810dceb66001611b5c565b610ae6338383611d03565b6116e83383611896565b6117045760405162461bcd60e51b81526004016109599061267d565b61080c84848484611dd1565b606060c9805461070290612351565b6060816000036117465750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611770578061175a816123b4565b91506117699050600a8361272b565b915061174a565b60008167ffffffffffffffff81111561178b5761178b61222c565b6040519080825280601f01601f1916602001820160405280156117b5576020820181803683370190505b5090505b8415611820576117ca60018361273f565b91506117d7600a86612752565b6117e29060306123a1565b60f81b8183815181106117f7576117f76123e4565b60200101906001600160f81b031916908160001a905350611819600a8661272b565b94506117b9565b949350505050565b6000818152609b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061185d82610c11565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118a283610c11565b9050806001600160a01b0316846001600160a01b031614806118c957506118c981856110c1565b806118205750836001600160a01b03166118e284610785565b6001600160a01b031614949350505050565b826001600160a01b031661190782610c11565b6001600160a01b03161461196b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610959565b6001600160a01b0382166119cd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610959565b6000818152609b6020908152604080832080546001600160a01b03191690556001600160a01b0386168352609a9091528120805460019290611a1090849061273f565b90915550506001600160a01b0382166000908152609a60205260408120805460019290611a3e9084906123a1565b909155505060008181526099602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081815b8451811015611ae457611ad082868381518110611ac357611ac36123e4565b6020026020010151611e04565b915080611adc816123b4565b915050611aa4565b509392505050565b600054610100900460ff16611b135760405162461bcd60e51b8152600401610959906126ca565b6097611b1f8382612500565b5060986107c08282612500565b600054610100900460ff16611b535760405162461bcd60e51b8152600401610959906126ca565b610da4336115db565b600054610100900460ff16611b835760405162461bcd60e51b8152600401610959906126ca565b6daaeb6d7670e522a718067333cd4e3b15610ae65760405163c3c5a54760e01b81523060048201526daaeb6d7670e522a718067333cd4e9063c3c5a547906024016020604051808303816000875af1158015611be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c079190612660565b610ae6578015611c8357604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015611c6757600080fd5b505af1158015611c7b573d6000803e3d6000fd5b505050505050565b6001600160a01b03821615611cd25760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401611c4d565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401611c4d565b816001600160a01b0316836001600160a01b031603611d645760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610959565b6001600160a01b038381166000818152609c6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611ddc8484846118f4565b611de884848484611e30565b61080c5760405162461bcd60e51b815260040161095990612766565b6000818310611e205760008281526020849052604090206110a5565b5060009182526020526040902090565b60006001600160a01b0384163b15611f2657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e749033908990889088906004016127b8565b6020604051808303816000875af1925050508015611eaf575060408051601f3d908101601f19168201909252611eac918101906127f5565b60015b611f0c573d808015611edd576040519150601f19603f3d011682016040523d82523d6000602084013e611ee2565b606091505b508051600003611f045760405162461bcd60e51b815260040161095990612766565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611820565b506001949350505050565b6001600160e01b031981168114610a3657600080fd5b600060208284031215611f5957600080fd5b81356110a581611f31565b8015158114610a3657600080fd5b600060208284031215611f8457600080fd5b81356110a581611f64565b60005b83811015611faa578181015183820152602001611f92565b50506000910152565b60008151808452611fcb816020860160208601611f8f565b601f01601f19169290920160200192915050565b6020815260006110a56020830184611fb3565b60006020828403121561200457600080fd5b5035919050565b80356001600160a01b038116811461202257600080fd5b919050565b6000806040838503121561203a57600080fd5b6120438361200b565b946020939093013593505050565b60008060006060848603121561206657600080fd5b61206f8461200b565b925061207d6020850161200b565b9150604084013590509250925092565b6000806000806000608086880312156120a557600080fd5b6120ae8661200b565b94506020860135935060408601359250606086013567ffffffffffffffff808211156120d957600080fd5b818801915088601f8301126120ed57600080fd5b8135818111156120fc57600080fd5b8960208260051b850101111561211157600080fd5b9699959850939650602001949392505050565b60006020828403121561213657600080fd5b6110a58261200b565b6020808252825182820181905260009190848201906040850190845b818110156121775783518352928401929184019160010161215b565b50909695505050505050565b6000806020838503121561219657600080fd5b823567ffffffffffffffff808211156121ae57600080fd5b818501915085601f8301126121c257600080fd5b8135818111156121d157600080fd5b8660208285010111156121e357600080fd5b60209290920196919550909350505050565b6000806040838503121561220857600080fd5b6122118361200b565b9150602083013561222181611f64565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561225857600080fd5b6122618561200b565b935061226f6020860161200b565b925060408501359150606085013567ffffffffffffffff8082111561229357600080fd5b818701915087601f8301126122a757600080fd5b8135818111156122b9576122b961222c565b604051601f8201601f19908116603f011681019083821181831017156122e1576122e161222c565b816040528281528a60208487010111156122fa57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561233157600080fd5b61233a8361200b565b91506123486020840161200b565b90509250929050565b600181811c9082168061236557607f821691505b60208210810361238557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d2576106d261238b565b6000600182016123c6576123c661238b565b5060010190565b80820281158282048414176106d2576106d261238b565b634e487b7160e01b600052603260045260246000fd5b601f8211156107c057600081815260208120601f850160051c810160208610156124215750805b601f850160051c820191505b81811015611c7b5782815560010161242d565b67ffffffffffffffff8311156124585761245861222c565b61246c836124668354612351565b836123fa565b6000601f8411600181146124a057600085156124885750838201355b600019600387901b1c1916600186901b178355610fba565b600083815260209020601f19861690835b828110156124d157868501358255602094850194600190920191016124b1565b50868210156124ee5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff81111561251a5761251a61222c565b61252e816125288454612351565b846123fa565b602080601f831160018114612563576000841561254b5750858301515b600019600386901b1c1916600185901b178555611c7b565b600085815260208120601f198616915b8281101561259257888601518255948401946001909101908401612573565b50858210156125b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000845160206125d38285838a01611f8f565b8551918401916125e68184848a01611f8f565b85549201916000906125f781612351565b6001828116801561260f576001811461262457612650565b60ff1984168752821515830287019450612650565b896000528560002060005b848110156126485781548982015290830190870161262f565b505082870194505b50929a9950505050505050505050565b60006020828403121561267257600080fd5b81516110a581611f64565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261273a5761273a612715565b500490565b818103818111156106d2576106d261238b565b60008261276157612761612715565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906127eb90830184611fb3565b9695505050505050565b60006020828403121561280757600080fd5b81516110a581611f3156fe68747470733a2f2f746f6b656e7572692e76657263656c2e6170702f6170692f74742fa2646970667358221220871428fa72b17c73c3047a9bfc1f13e3e0fffa85562b8f15191de112c7f18c7864736f6c63430008130033