60806040523480156200001157600080fd5b50604051806040016040528060078152602001660414e59524332360cc1b815250604051806040016040528060048152602001636169726360e01b81525081609a90816200006091906200014c565b50609b6200006f82826200014c565b505033321490506200008057600080fd5b7350639b0292ba3a29cafe15c3d3749c9e619accf83314620000a157600080fd5b62000218565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000d257607f821691505b602082108103620000f357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014757600081815260208120601f850160051c81016020861015620001225750805b601f850160051c820191505b8181101562000143578281556001016200012e565b5050505b505050565b81516001600160401b03811115620001685762000168620000a7565b6200018081620001798454620000bd565b84620000f9565b602080601f831160018114620001b857600084156200019f5750858301515b600019600386901b1c1916600185901b17855562000143565b600085815260208120601f198616915b82811015620001e957888601518255948401946001909101908401620001c8565b5085821015620002085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61186e80620002286000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636e4ee811116100de5780639c74daf011610097578063bc5ef22c11610071578063bc5ef22c14610363578063dd62ed3e14610376578063e79ffa11146103af578063f710e01e146103c757600080fd5b80639c74daf01461032a578063a457c2d71461033d578063a9059cbb1461035057600080fd5b80636e4ee811146102be57806370a08231146102c65780637e1ac4dc146102ef57806385225635146102fc57806390ec57f11461030f57806395d89b411461032257600080fd5b806323b872dd1161014b578063358fbdc111610125578063358fbdc114610262578063395093511461027557806339ae9c331461028857806342966c68146102ab57600080fd5b806323b872dd1461021b578063313ce5671461022e578063323296441461023d57600080fd5b806306fdde0314610193578063095ea7b3146101b157806313b0f4e1146101d4578063158ef93e146101e957806318160ddd146101f6578063204825c514610208575b600080fd5b61019b6103da565b6040516101a891906113a0565b60405180910390f35b6101c46101bf366004611403565b61046c565b60405190151581526020016101a8565b6101e76101e2366004611403565b610483565b005b6000546101c49060ff1681565b6099545b6040519081526020016101a8565b6101e7610216366004611444565b6104d0565b6101c46102293660046114c8565b610563565b604051601281526020016101a8565b6065546001600160a01b03165b6040516001600160a01b0390911681526020016101a8565b6101e7610270366004611509565b610612565b6101c4610283366004611403565b6106fd565b6101c4610296366004611509565b609d6020526000908152604090205460ff1681565b6101e76102b936600461152d565b610739565b6101e7610746565b6101fa6102d4366004611509565b6001600160a01b031660009081526097602052604090205490565b609c546101c49060ff1681565b6101e761030a366004611509565b6107ba565b6101e761031d366004611403565b61084b565b61019b610b82565b609e5461024a906001600160a01b031681565b6101c461034b366004611403565b610b91565b6101c461035e366004611403565b610c2a565b6101e7610371366004611546565b610c37565b6101fa61038436600461157b565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b609c5461024a9061010090046001600160a01b031681565b6101e76103d53660046115b4565b610c7e565b6060609a80546103e9906115cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610415906115cf565b80156104625780601f1061043757610100808354040283529160200191610462565b820191906000526020600020905b81548152906001019060200180831161044557829003601f168201915b5050505050905090565b6000610479338484610cad565b5060015b92915050565b609c5461010090046001600160a01b0316321461049f57600080fd5b6001600160a01b038216600090815260976020526040812080548392906104c790849061161f565b90915550505050565b609c5461010090046001600160a01b031632146104ec57600080fd5b8160005b8181101561055c5782609d600087878581811061050f5761050f611632565b90506020020160208101906105249190611509565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561055581611648565b90506104f0565b5050505050565b6000610570848484610dd1565b6001600160a01b0384166000908152609860209081526040808320338452909152902054828110156105fa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106078533858403610cad565b506001949350505050565b6065546001600160a01b0316331461063c5760405162461bcd60e51b81526004016105f190611661565b6001600160a01b0381166106a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f1565b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526098602090815260408083206001600160a01b0387168452909152812054909161047991859061073490869061161f565b610cad565b6107433382610fab565b50565b6065546001600160a01b031633146107705760405162461bcd60e51b81526004016105f190611661565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b6065546001600160a01b031633146107e45760405162461bcd60e51b81526004016105f190611661565b604051637396f33f60e11b81526001600160a01b038216600482015273698fe923ea18ff95a5145f23fb70d98ce878cf169063e72de67e9060240160006040518083038186803b15801561083757600080fd5b505af415801561055c573d6000803e3d6000fd5b600054610100900460ff16806108605750303b155b8061086e575060005460ff16155b61088a5760405162461bcd60e51b81526004016105f190611696565b600054610100900460ff161580156108ac576000805461ffff19166101011790555b3332146108b857600080fd5b73b187ffd9b50728cf369358422d336dfe5e592b4d33146108d857600080fd5b6108e0611105565b6040805180820190915260078152660414e59524332360cc1b6020820152609a9061090b9082611748565b506040805180820190915260048152636169726360e01b6020820152609b906109349082611748565b506a084595161401484a00000060998190553360009081526097602090815260409182902092909255609c80546001600160a81b031916743d66d953869b4c3a5466bae231f28e1579d322e300179055805163b0f479a160e01b8152905173698fe923ea18ff95a5145f23fb70d98ce878cf169263b0f479a192600480820193918290030181865af41580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190611808565b6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190611808565b6001600160a01b031663c9c653963073698fe923ea18ff95a5145f23fb70d98ce878cf1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865af4158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190611808565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190611808565b609e80546001600160a01b0319166001600160a01b0392909216919091179055610b6a838361046c565b508015610b7d576000805461ff00191690555b505050565b6060609b80546103e9906115cf565b3360009081526098602090815260408083206001600160a01b038616845290915281205482811015610c135760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f1565b610c203385858403610cad565b5060019392505050565b6000610479338484610dd1565b609c5461010090046001600160a01b03163214610c5357600080fd5b6001600160a01b03919091166000908152609d60205260409020805460ff1916911515919091179055565b609c5461010090046001600160a01b03163214610c9a57600080fd5b609c805460ff1916911515919091179055565b6001600160a01b038316610d0f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f1565b6001600160a01b038216610d705760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f1565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f1565b6001600160a01b038216610e975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f1565b610ea283838361118a565b6001600160a01b03831660009081526097602052604090205481811015610f1a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f1565b6001600160a01b03808516600090815260976020526040808220858503905591851681529081208054849290610f5190849061161f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f9d91815260200190565b60405180910390a350505050565b6001600160a01b03821661100b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f1565b6110178260008361118a565b6001600160a01b0382166000908152609760205260409020548181101561108b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f1565b6001600160a01b03831660009081526097602052604081208383039055609980548492906110ba908490611825565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600054610100900460ff168061111a5750303b155b80611128575060005460ff16155b6111445760405162461bcd60e51b81526004016105f190611696565b600054610100900460ff16158015611166576000805461ffff19166101011790555b61116e611274565b6111766112e8565b8015610743576000805461ff001916905550565b6001600160a01b0383166000908152609d602052604090205460ff16806111c05750326000908152609d602052604090205460ff165b806111ce5750609c5460ff16155b6111d757600080fd5b609e546001600160a01b0316600090815260976020526040902054600003610b7d576001600160a01b0383166000908152609d602052604090205460ff168061122f5750326000908152609d602052604090205460ff165b610b7d5760405162461bcd60e51b81526020600482015260166024820152751d1c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b60448201526064016105f1565b600054610100900460ff16806112895750303b155b80611297575060005460ff16155b6112b35760405162461bcd60e51b81526004016105f190611696565b600054610100900460ff16158015611176576000805461ffff19166101011790558015610743576000805461ff001916905550565b600054610100900460ff16806112fd5750303b155b8061130b575060005460ff16155b6113275760405162461bcd60e51b81526004016105f190611696565b600054610100900460ff16158015611349576000805461ffff19166101011790555b606580546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610743576000805461ff001916905550565b600060208083528351808285015260005b818110156113cd578581018301518582016040015282016113b1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461074357600080fd5b6000806040838503121561141657600080fd5b8235611421816113ee565b946020939093013593505050565b8035801515811461143f57600080fd5b919050565b60008060006040848603121561145957600080fd5b833567ffffffffffffffff8082111561147157600080fd5b818601915086601f83011261148557600080fd5b81358181111561149457600080fd5b8760208260051b85010111156114a957600080fd5b6020928301955093506114bf918601905061142f565b90509250925092565b6000806000606084860312156114dd57600080fd5b83356114e8816113ee565b925060208401356114f8816113ee565b929592945050506040919091013590565b60006020828403121561151b57600080fd5b8135611526816113ee565b9392505050565b60006020828403121561153f57600080fd5b5035919050565b6000806040838503121561155957600080fd5b8235611564816113ee565b91506115726020840161142f565b90509250929050565b6000806040838503121561158e57600080fd5b8235611599816113ee565b915060208301356115a9816113ee565b809150509250929050565b6000602082840312156115c657600080fd5b6115268261142f565b600181811c908216806115e357607f821691505b60208210810361160357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561047d5761047d611609565b634e487b7160e01b600052603260045260246000fd5b60006001820161165a5761165a611609565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f821115610b7d57600081815260208120601f850160051c810160208610156117215750805b601f850160051c820191505b818110156117405782815560010161172d565b505050505050565b815167ffffffffffffffff811115611762576117626116e4565b6117768161177084546115cf565b846116fa565b602080601f8311600181146117ab57600084156117935750858301515b600019600386901b1c1916600185901b178555611740565b600085815260208120601f198616915b828110156117da578886015182559484019460019091019084016117bb565b50858210156117f85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561181a57600080fd5b8151611526816113ee565b8181038181111561047d5761047d61160956fea2646970667358221220028f9007335f7209dbc4266ac91a517e39756ac7bc1e564feb6c15315987e45364736f6c63430008100033